BZOJ 2716: [Violet 3]天使玩偶
2716: [Violet 3]天使玩偶
Time Limit: 80 Sec Memory Limit: 128 MB
Submit: 1473 Solved: 621
[Submit][Status][Discuss]
Description
Input
Output
Sample Input & Output
样例过大,略
HINT
Source
Vani原创 欢迎移步 OJ2648
[Submit][Status][Discuss]
CDQ分治,分类讨论拆绝对值的方式,分别查询最优值。
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 5 inline int nextChar(void) { 6 const int siz = 1024; 7 static char buf[siz]; 8 static char *hd = buf + siz; 9 static char *tl = buf + siz; 10 if (hd == tl) 11 fread(hd = buf, 1, siz, stdin); 12 return int(*hd++); 13 } 14 15 inline int nextInt(void) { 16 register int ret = 0; 17 register int neg = false; 18 register int bit = nextChar(); 19 for (; bit < 48; bit = nextChar()) 20 if (bit == '-')neg ^= true; 21 for (; bit > 47; bit = nextChar()) 22 ret = ret * 10 + bit - 48; 23 return neg ? -ret : ret; 24 } 25 26 const int lim = 1000001; 27 const int siz = 1000005; 28 const int inf = 1000000007; 29 30 int n, m; 31 32 struct data { 33 int k, x, y, t, p; 34 inline friend bool operator < 35 (const data &a, const data &b) { 36 if (a.x != b.x) 37 return a.x < b.x; 38 else 39 return a.k < b.k; 40 } 41 }p[siz], s[siz], q[siz]; 42 43 int ans[siz]; 44 45 int now; 46 int bit[siz]; 47 int tim[siz]; 48 49 inline void add(int t, int k) { 50 for (; t < siz; t += t&-t) 51 if (bit[t] < k || tim[t] != now) 52 bit[t] = k, tim[t] = now; 53 } 54 55 inline int ask(int t) { 56 int ret = -inf; 57 for (; t; t -= t&-t) 58 if (ret < bit[t] && tim[t] == now) 59 ret = bit[t]; 60 return ret; 61 } 62 63 void cdqSolve(int l, int r) { 64 if (l >= r)return; 65 66 int mid = (l + r) >> 1; 67 68 cdqSolve(l, mid); 69 cdqSolve(mid + 1, r); 70 71 int t1 = l, t2 = mid + 1, tot = l; 72 73 while (t1 <= mid && t2 <= r) { 74 if (s[t1] < s[t2]) 75 q[tot++] = s[t1++]; 76 else 77 q[tot++] = s[t2++]; 78 } 79 80 while (t1 <= mid) 81 q[tot++] = s[t1++]; 82 83 while (t2 <= r) 84 q[tot++] = s[t2++]; 85 86 for (int i = l; i <= r; ++i) 87 s[i] = q[i]; 88 89 ++now; 90 91 for (int i = l; i <= r; ++i) 92 if (s[i].k && s[i].t > mid) { 93 int tmp = s[i].x + s[i].y - ask(s[i].y); 94 if (ans[s[i].p] > tmp) 95 ans[s[i].p] = tmp; 96 } 97 else if (!s[i].k && s[i].t <= mid) 98 add(s[i].y, s[i].x + s[i].y); 99 } 100 101 inline void cdqSolve1(void) { 102 memcpy(s, p, sizeof(s)); 103 cdqSolve(1, n + m); 104 } 105 106 inline void cdqSolve2(void) { 107 memcpy(s, p, sizeof(s)); 108 for (int i = 1; i <= n + m; ++i) 109 s[i].x = lim - s[i].x; 110 cdqSolve(1, n + m); 111 } 112 113 inline void cdqSolve3(void) { 114 memcpy(s, p, sizeof(s)); 115 for (int i = 1; i <= n + m; ++i) 116 s[i].y = lim - s[i].y; 117 cdqSolve(1, n + m); 118 } 119 120 inline void cdqSolve4(void) { 121 memcpy(s, p, sizeof(s)); 122 for (int i = 1; i <= n + m; ++i) 123 s[i].x = lim - s[i].x, 124 s[i].y = lim - s[i].y; 125 cdqSolve(1, n + m); 126 } 127 128 signed main(void) { 129 // freopen("in", "r", stdin); 130 // freopen("out", "w", stdout); 131 132 n = nextInt(); 133 m = nextInt(); 134 135 for (int i = 1; i <= n; ++i) { 136 p[i].x = nextInt(); 137 p[i].y = nextInt(); 138 p[i].k = 0; 139 p[i].t = i; 140 } 141 142 for (int i = 1; i <= m; ++i) { 143 p[i + n].k = nextInt() - 1; 144 p[i + n].x = nextInt(); 145 p[i + n].y = nextInt(); 146 p[i + n].t = i + n; 147 p[i + n].p = i; 148 } 149 150 for (int i = 1; i <= m; ++i) 151 ans[i] = inf; 152 153 cdqSolve1(); 154 cdqSolve2(); 155 cdqSolve3(); 156 cdqSolve4(); 157 158 for (int i = 1; i <= m; ++i) 159 if (p[i + n].k)printf("%d\n", ans[i]); 160 }
@Author: YouSiki
转载于:https://www.cnblogs.com/yousiki/p/6245274.html
BZOJ 2716: [Violet 3]天使玩偶相关推荐
- BZOJ 2716 Violet 3 天使玩偶
2716: [Violet 3]天使玩偶 Time Limit: 80 Sec Memory Limit: 128 MB Submit: 2145 Solved: 928 [Submit][Sta ...
- BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2716 怎么KD树跑得都那么快啊..我写的CDQ分治被暴虐 做四遍CDQ分治,每次求一个 ...
- BZOJ 2716: [Violet 3]天使玩偶 | CDQ分治
题目: 南开OJ有非权限提交处 http://oi.nks.edu.cn/zh/Problem/Details/2739 题解: 鹅鹅鹅....有三维(t,x,y),所以可以用CDQ解决的好题 初始点 ...
- bzoj 2648: SJY摆棋子2716: [Violet 3]天使玩偶 --kdtree
2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 Time Limit: 20 Sec Memory Limit: 128 MB Description 这天,S ...
- BZOJ2648: SJY摆棋子2716: [Violet 3]天使玩偶
BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限... 其实这两道是同一题. 附上2648的题面: Description 这天,SJY显得无聊. ...
- BZOJ 2716/CH 4701 天使玩偶
[题意] Ayu在七年前曾经收到过一个天使玩偶,当时她把它当做时间囊埋在了地下. 而七年后的今天,Ayu却忘了她把天使玩偶埋在了哪里,所以她决定仅凭一点模糊的记忆来寻找它. 我们把Ayu生活的小镇看做 ...
- 2716 [Violet 3] 天使玩偶
@(BZOJ)[CDQ分治] Sample Input 100 10081 2327 1652 5844 2425 9534 296 258 1497 5097 1864 347 2255 2889 ...
- 2716: [Violet 3]天使玩偶/2648: SJY摆棋子
题目链接 题目大意:平面动态加点,求与给出的点曼哈顿距离最近点 题解:KD树模板题 我的收获:23333 #include <cstdio> #include <iostream&g ...
- 【BZOJ 2716/2648】 [Violet 3]天使玩偶
2716: [Violet 3]天使玩偶 kd-tree模板题. ①首先依次按照每一维(即先按照 x x,再按照yy,再按照 x x-多维同理)将点存在一棵二叉树中: 先求出以当前维数为关键字的中间点 ...
最新文章
- 《大数据、小数据、无数据:网络世界的数据学术》一 3.3 社会与技术
- 协议层次及其服务模型
- 回调函数自定义传参_10分钟教你手写8个常用的自定义hooks
- 如何利用FFT(基2时间以及基2频率)信号流图求序列的DFT
- C#取真实IP地址及分析
- java中成绩转换_成绩转换
- 用Python做图像处理(PIL库的使用)
- Java Web 项目音乐网站的开发与实现
- 8.2-全栈Java笔记:字符串相关类(String/StringBuilder /StringBuffer)
- 计算机三本院校大学排名,全国三本大学排名
- DOP反映的是测量误差与定位误差之间的传递关系。
- 深入浅出Direct3D 蔡军生 版权所有
- 【火龙果】评测三 MicroPython上手初体验
- mysql增加重做日志组_mysql重做日志
- SAS2x28扩展卡
- 深剖VR,AR和MR三者之间关系
- vue项目微前端试水
- 微信无法下载文件如何做提示跳转到浏览器
- 如何用java让坦克发射子弹_java怎么制作坦克大战
- 【原创】EJB开发基础——EJB规范
热门文章
- 安装node-sass运行报错 Module build failed: TypeError: this.getResolve is not a function at Object.loader
- Redis 的主从复制太强大了!
- 比学习新技术更重要的是思维的改变
- Android --- GridLayoutManager 设置了 item 均匀分布,但是无效
- An error happened during template parsing (template: class path resource [templates/emp/list.html]
- matlab调用kmeans_K_Means算法的MATLAB实现
- js怎么把按钮往下移_js 实现单行数据上下移动
- erp沙盘模拟软件_VOL.977 工商第九周周报 ERP沙盘模拟大赛排名第一 跨学科校企合作商讨筹备...
- Linux下按扇区读写块设备,Linux下按扇区读写块设备
- centos修改mysql密码_WAMP下修改MYSQL数据库密码