BZOJ 2716: [Violet 3]天使玩偶 | CDQ分治
题目:
南开OJ有非权限提交处
http://oi.nks.edu.cn/zh/Problem/Details/2739
题解:
鹅鹅鹅....有三维(t,x,y),所以可以用CDQ解决的好题
初始点就是t超级小的点
先按x排个序,时间作为分治的第二维,这样只有前半段时间的修改操作对后半段时间的询问操作需要在当前solve处理,y作为需要用数据结构维护的第三维
考虑把曼哈顿距离展开变成没有绝对值的式子,但是四种情况不好维护.
如果以某一次询问的点(x0,y0)为源点,显然答案一定在四个象限中的一个
考虑只维护第三象限的答案,那么绝对值式子可以变成(x0+y0)-(x+y)
用树状数组可以维护y0位置之前的前缀最大值
这样每次修改操作就在y位置插入(x+y)就可以做到维护位于第三象限的答案
其他象限的答案我们只要旋转坐标轴变成第三象限即可
#include<cstdio> #include<algorithm> #include<cstring> #define N 1000010 #define INF 0x7fffffff using namespace std; int n,m; struct node {int id,op,x,y,pos;bool operator < (const node &b) const{if (x!=b.x) return x<b.x;if (y!=b.y) return y<b.y;return op<b.op;} }q[N],tmp[N]; int ans[N],tot,t[2*N],lim=N; void insert(int x,int w) {for (;x<=lim;x+=x&-x) t[x]=max(t[x],w); } int query(int x) {int ret=0;for (;x;x-=x&-x)ret=max(ret,t[x]);return ret; } void clear(int x) {for (;x<=lim;x+=x&-x) t[x]=0; } void solve(int l,int r) {if (l==r) return ;int mid=l+r>>1;for (int i=l;i<=r;i++){if (q[i].id<=mid && q[i].op==1)insert(q[i].y,q[i].y+q[i].x);if (q[i].id>mid && q[i].op==2){int t=query(q[i].y);if (t!=0)ans[q[i].pos]=min(ans[q[i].pos],q[i].x+q[i].y-t);}}for (int k=l,i=l,j=mid+1;k<=r;k++){if (q[k].id<=mid && q[k].op==1)clear(q[k].y);if (q[k].id<=mid) tmp[i++]=q[k];else tmp[j++]=q[k];}for (int i=l;i<=r;i++)q[i]=tmp[i];solve(l,mid);solve(mid+1,r);} int main() {scanf("%d%d",&n,&m);for (int i=1,x,y;i<=n;i++){scanf("%d%d",&x,&y);q[i]=(node){i,1,x+1,y+1,0};}for (int i=1,op,x,y;i<=m;i++){scanf("%d%d%d",&op,&x,&y);if (op==1) q[i+n]=(node){i+n,1,x+1,y+1,0};else q[i+n]=(node){i+n,2,x+1,y+1,++tot},ans[tot]=INF;}sort(q+1,q+1+n+m); solve(1,n+m);for (int i=1;i<=n+m;i++) q[i].y=lim-q[i].y;sort(q+1,q+1+n+m);solve(1,n+m);for (int i=1;i<=n+m;i++) q[i].x=lim-q[i].x;sort(q+1,q+1+n+m);solve(1,n+m);for (int i=1;i<=n+m;i++) q[i].y=lim-q[i].y;sort(q+1,q+1+n+m);solve(1,n+m);for (int i=1;i<=tot;i++)printf("%d\n",ans[i]);return 0; }
转载于:https://www.cnblogs.com/mrsheep/p/8109361.html
BZOJ 2716: [Violet 3]天使玩偶 | CDQ分治相关推荐
- BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2716 怎么KD树跑得都那么快啊..我写的CDQ分治被暴虐 做四遍CDQ分治,每次求一个 ...
- BZOJ 2716: [Violet 3]天使玩偶
2716: [Violet 3]天使玩偶 Time Limit: 80 Sec Memory Limit: 128 MB Submit: 1473 Solved: 621 [Submit][Sta ...
- BZOJ 2716 Violet 3 天使玩偶
2716: [Violet 3]天使玩偶 Time Limit: 80 Sec Memory Limit: 128 MB Submit: 2145 Solved: 928 [Submit][Sta ...
- 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.[Violet3]天使玩偶(CDQ分治 坐标变换)
题目链接 考虑对于两个点a,b,距离为|x[a]-x[b]|+|y[a]-y[b]|,如果a在b的右上,那我们可以把绝对值去掉,即x[a]+y[a]-(x[b]+y[b]). 即我们要求满足x[b]& ...
- 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 ...
最新文章
- python 接雨水
- Spring-Bean标签属性scope范围
- flock - 必应词典
- 全志线刷工具如何刷linux,全志 Allwinner V3S 开发环境搭建 (二)安装必要工具
- linux 和服务通讯,Android 的Activity和Service之间的通信
- jQuery的事件change
- Linux系统中打开文件数量的查看方法
- 转载 侃一侃编译原理的“文法” 作者 :博客网 my笔触
- win10怎么修改计算机桌面存储路径,win10桌面保存位置怎么修改_win10修改桌面存储位置教程...
- 【毕业设计】深度学习人脸性别年龄识别系统 - python
- mysql fio测试_fio_飞哥最爱白菜_新浪博客
- 【生产者消费者模型】
- 晓_【斗战神学习二十四】一手交钱,一手交货
- 服务器 uefi 安装win7系统,UEFI+GPT安装win7系统图文教程
- Python糗事百科完整代码
- HG Plugins 1.0 For JQuery
- Java学习第二周总结
- 国产数据库--DM(达梦数据库)
- 众贷网满月倒闭 网络金融监管再受质疑
- 雅马哈RCX340机器人与相机实例程序说明
热门文章
- 坏消息!FCC默许美国ISP在未经批准之情况下出售用户数据!
- Mybatis学习笔记-CURD(基于配置文件的方式)
- 本期期刊主题:ASP.NET技术与JavaScript技巧,包括控件等
- python读excel字体颜色_python操作excel之设置字体颜色及格式
- sas一元回归分析_商业分析的应用
- gta4 l3环境优化补丁_【安全刻不容缓】快给你们的爱7打打补丁吧 俄罗斯大佬的持续更新补丁包来了...
- php正则如何使用 1,PHP正则表达式使用详解(1)
- 使用Zookeeper共享锁和排它锁和分布式队列的原理和实现(ZkClient)
- Golang 实现求素数【 输入N,求N内素数个数 】
- SpringMVC入门(一)之HelloWorld(IDEA版)