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]天使玩偶相关推荐

  1. BZOJ 2716 Violet 3 天使玩偶

    2716: [Violet 3]天使玩偶 Time Limit: 80 Sec  Memory Limit: 128 MB Submit: 2145  Solved: 928 [Submit][Sta ...

  2. BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)

    题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2716 怎么KD树跑得都那么快啊..我写的CDQ分治被暴虐 做四遍CDQ分治,每次求一个 ...

  3. BZOJ 2716: [Violet 3]天使玩偶 | CDQ分治

    题目: 南开OJ有非权限提交处 http://oi.nks.edu.cn/zh/Problem/Details/2739 题解: 鹅鹅鹅....有三维(t,x,y),所以可以用CDQ解决的好题 初始点 ...

  4. bzoj 2648: SJY摆棋子2716: [Violet 3]天使玩偶 --kdtree

    2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 Time Limit: 20 Sec  Memory Limit: 128 MB Description 这天,S ...

  5. BZOJ2648: SJY摆棋子2716: [Violet 3]天使玩偶

    BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限... 其实这两道是同一题. 附上2648的题面: Description 这天,SJY显得无聊. ...

  6. BZOJ 2716/CH 4701 天使玩偶

    [题意] Ayu在七年前曾经收到过一个天使玩偶,当时她把它当做时间囊埋在了地下. 而七年后的今天,Ayu却忘了她把天使玩偶埋在了哪里,所以她决定仅凭一点模糊的记忆来寻找它. 我们把Ayu生活的小镇看做 ...

  7. 2716 [Violet 3] 天使玩偶

    @(BZOJ)[CDQ分治] Sample Input 100 10081 2327 1652 5844 2425 9534 296 258 1497 5097 1864 347 2255 2889 ...

  8. 2716: [Violet 3]天使玩偶/2648: SJY摆棋子

    题目链接 题目大意:平面动态加点,求与给出的点曼哈顿距离最近点 题解:KD树模板题 我的收获:23333 #include <cstdio> #include <iostream&g ...

  9. 【BZOJ 2716/2648】 [Violet 3]天使玩偶

    2716: [Violet 3]天使玩偶 kd-tree模板题. ①首先依次按照每一维(即先按照 x x,再按照yy,再按照 x x-多维同理)将点存在一棵二叉树中: 先求出以当前维数为关键字的中间点 ...

最新文章

  1. 《大数据、小数据、无数据:网络世界的数据学术》一 3.3 社会与技术
  2. 协议层次及其服务模型
  3. 回调函数自定义传参_10分钟教你手写8个常用的自定义hooks
  4. 如何利用FFT(基2时间以及基2频率)信号流图求序列的DFT
  5. C#取真实IP地址及分析
  6. java中成绩转换_成绩转换
  7. 用Python做图像处理(PIL库的使用)
  8. Java Web 项目音乐网站的开发与实现
  9. 8.2-全栈Java笔记:字符串相关类(String/StringBuilder /StringBuffer)
  10. 计算机三本院校大学排名,全国三本大学排名
  11. DOP反映的是测量误差与定位误差之间的传递关系。
  12. 深入浅出Direct3D 蔡军生 版权所有
  13. 【火龙果】评测三 MicroPython上手初体验
  14. mysql增加重做日志组_mysql重做日志
  15. SAS2x28扩展卡
  16. 深剖VR,AR和MR三者之间关系
  17. vue项目微前端试水
  18. 微信无法下载文件如何做提示跳转到浏览器
  19. 如何用java让坦克发射子弹_java怎么制作坦克大战
  20. 【原创】EJB开发基础——EJB规范

热门文章

  1. 安装node-sass运行报错 Module build failed: TypeError: this.getResolve is not a function at Object.loader
  2. Redis 的主从复制太强大了!
  3. 比学习新技术更重要的是思维的改变
  4. Android --- GridLayoutManager 设置了 item 均匀分布,但是无效
  5. An error happened during template parsing (template: class path resource [templates/emp/list.html]
  6. matlab调用kmeans_K_Means算法的MATLAB实现
  7. js怎么把按钮往下移_js 实现单行数据上下移动
  8. erp沙盘模拟软件_VOL.977 工商第九周周报 ERP沙盘模拟大赛排名第一 跨学科校企合作商讨筹备...
  9. Linux下按扇区读写块设备,Linux下按扇区读写块设备
  10. centos修改mysql密码_WAMP下修改MYSQL数据库密码