bzoj2648/2716 kdtree
SJY摆棋子
Time Limit: 20 Sec Memory Limit: 128 MB
Submit: 5199 Solved: 1813
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
1 1
2 3
2 1 2
1 3 3
2 4 2
Sample Output
1
2
HINT
kdtree可以过
Source
鸣谢 孙嘉裕
1 #include<cstring> 2 #include<cmath> 3 #include<iostream> 4 #include<algorithm> 5 #include<cstdio> 6 7 #define inf 1000000007 8 #define N 500007 9 #define ll long long 10 using namespace std; 11 inline int read() 12 { 13 int x=0,f=1;char ch=getchar(); 14 while(ch<'0'||ch>'9'){if (ch=='-')f=-1;ch=getchar();} 15 while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+ch-'0';ch=getchar();} 16 return x*f; 17 } 18 19 int n,m,rt,F; 20 struct Node 21 { 22 int d[2],mn[2],mx[2],l,r; 23 int& operator[](int x) 24 { 25 return d[x]; 26 } 27 Node(int x=0,int y=0)//无代入的话x,y为0,代入即为代入值。 28 { 29 l=0,r=0; 30 d[0]=x,d[1]=y; 31 } 32 }p[N]; 33 bool operator<(Node x,Node y) 34 { 35 return x[F]<y[F]; 36 } 37 inline int dis(Node x,Node y) 38 { 39 return abs(x[0]-y[0])+abs(x[1]-y[1]); 40 } 41 struct kdtree 42 { 43 int ans; 44 Node tr[N*2],T; 45 void update(int p) 46 { 47 Node l=tr[tr[p].l],r=tr[tr[p].r]; 48 for (int i=0;i<2;i++) 49 { 50 if (tr[p].l)tr[p].mn[i]=min(tr[p].mn[i],l.mn[i]),tr[p].mx[i]=max(tr[p].mx[i],l.mx[i]); 51 if (tr[p].r)tr[p].mn[i]=min(tr[p].mn[i],r.mn[i]),tr[p].mx[i]=max(tr[p].mx[i],r.mx[i]); 52 } 53 } 54 int build(int l,int r,int now) 55 { 56 F=now;int mid=(l+r)>>1; 57 nth_element(p+l,p+mid,p+r+1); 58 tr[mid]=p[mid]; 59 for (int i=0;i<2;i++) 60 tr[mid].mn[i]=tr[mid].mx[i]=tr[mid][i]; 61 if (l<mid)tr[mid].l=build(l,mid-1,now^1); 62 if (r>mid)tr[mid].r=build(mid+1,r,now^1); 63 update(mid); 64 return mid; 65 } 66 void ins(int p,int now) 67 { 68 if (T[now]>=tr[p][now]) 69 { 70 if(tr[p].r)ins(tr[p].r,now^1); 71 else 72 { 73 tr[p].r=++n,tr[n]=T; 74 for (int i=0;i<2;i++) 75 tr[n].mn[i]=tr[n].mx[i]=tr[n][i]; 76 } 77 } 78 else 79 { 80 if (tr[p].l)ins(tr[p].l,now^1); 81 else 82 { 83 tr[p].l=++n,tr[n]=T; 84 for (int i=0;i<2;i++) 85 tr[n].mn[i]=tr[n].mx[i]=tr[n][i]; 86 } 87 } 88 update(p); 89 } 90 int get(int k,Node p) 91 { 92 int tmp=0; 93 for (int i=0;i<2;i++) 94 tmp+=max(0,tr[k].mn[i]-p[i]); 95 for (int i=0;i<=2;i++) 96 tmp+=max(0,p[i]-tr[k].mx[i]); 97 return tmp; 98 } 99 void query(int p,int now) 100 { 101 int d,dl=inf,dr=inf; 102 d=dis(tr[p],T); 103 ans=min(ans,d); 104 if (tr[p].l)dl=get(tr[p].l,T); 105 if (tr[p].r)dr=get(tr[p].r,T); 106 if (dl<dr) 107 { 108 if (dl<ans)query(tr[p].l,now^1); 109 if (dr<ans)query(tr[p].r,now^1); 110 } 111 else 112 { 113 if (dr<ans)query(tr[p].r,now^1); 114 if (dl<ans)query(tr[p].l,now^1); 115 } 116 } 117 int query(Node p) 118 { 119 ans=inf,T=p,query(rt,0); 120 return ans; 121 } 122 void ins(Node p) 123 { 124 T=p; 125 ins(rt,0); 126 } 127 }kd; 128 int main() 129 { 130 freopen("fzy.in","r",stdin); 131 freopen("fzy.out","w",stdout); 132 133 n=read(),m=read(); 134 for (int i=1;i<=n;i++) 135 p[i][0]=read(),p[i][1]=read(); 136 rt=kd.build(1,n,0);//后者0,代表维的循环 137 while(m--) 138 { 139 int flag=read(),x=read(),y=read(); 140 if (flag==1) kd.ins(Node(x,y)); 141 else printf("%d\n",kd.query(Node(x,y))); 142 } 143 }
转载于:https://www.cnblogs.com/fengzhiyuan/p/8176561.html
bzoj2648/2716 kdtree相关推荐
- BZOJ2648 SJY摆棋子(KD-Tree)
板子题. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> # ...
- bzoj 2648: SJY摆棋子2716: [Violet 3]天使玩偶 --kdtree
2648: SJY摆棋子&&2716: [Violet 3]天使玩偶 Time Limit: 20 Sec Memory Limit: 128 MB Description 这天,S ...
- KD-Tree复习笔记(BZOJ1941 BZOJ2648 BZOJ4066)
快一年了都没碰到什么必须用KDT的题目导致模板完全忘光了,重新复习了一下. K_Dimention_Tree是一种用来处理二维以上问题的数据结构(OI中一般都是二维),本质是二维启发式估价函数实现剪枝 ...
- 【bzoj2648】SJY摆棋子 KD-tree
题目描述 这天,SJY显得无聊.在家自己玩.在一个棋盘上,有N个黑色棋子.他每次要么放到棋盘上一个黑色棋子,要么放上一个白色棋子,如果是白色棋子,他会找出距离这个白色棋子最近的黑色棋子.此处的距离是 ...
- [bzoj2648]SJY摆棋子(带插入kd-tree)
解题关键:带插入kdtree模板题. #include<iostream> #include<cstdio> #include<cstring> #include& ...
- BZOJ2648: SJY摆棋子2716: [Violet 3]天使玩偶
BZOJ2648: SJY摆棋子 BZOJ2716: [Violet 3]天使玩偶 BZOJ氪金无极限... 其实这两道是同一题. 附上2648的题面: Description 这天,SJY显得无聊. ...
- [KDTree] [BZOJ2716] [Violet 3] 天使玩偶
题目描述 Description Ayu在七年前曾经收到过一个天使玩偶,当时她把它当作时间囊埋在了地下.而七年后的今天,Ayu却忘了她把天使玩偶埋在了哪里,所以她决定仅凭一点模糊的记忆来寻找它. 我们 ...
- BZOJ 2716 Violet 3 天使玩偶
2716: [Violet 3]天使玩偶 Time Limit: 80 Sec Memory Limit: 128 MB Submit: 2145 Solved: 928 [Submit][Sta ...
- 【BZOJ 2716/2648】 [Violet 3]天使玩偶
2716: [Violet 3]天使玩偶 kd-tree模板题. ①首先依次按照每一维(即先按照 x x,再按照yy,再按照 x x-多维同理)将点存在一棵二叉树中: 先求出以当前维数为关键字的中间点 ...
- Open3D KdTree建立、3种近邻搜索及结果可视化
1. 点云索引 Open3D KdTree,可以快速的在无序的点云中建立空间拓扑结构,使得能迅速的进行近邻搜索: 2. 近邻方法分类: Open3D这边支持的近邻搜索方法由VTK实现: K近邻搜索(K ...
最新文章
- Kettle使用_9 存储过程与设置变量
- Docker容器基本使用
- 2021年中国手机游戏行业研究报告
- 《俄罗斯方块》正版授权手游开启预约:支持QQ、微信双平台
- Spring学习之AOP
- Active Learning through label error statistical methods(ALSE)
- 【先锋】永洪科技何春涛:不忘初心,砥砺前行
- 计算机重装系统知识,想学重装系统要怎么做?重难点知识讲解,零基础照样能够装系统!...
- [AV1] AV1 帧内预测
- kiosk 无效_开发Kiosk Web应用程序的10个技巧
- 服务器UDIMM, LRDIMM,RDIMM三种内存的区别
- TuscanySCA5-理解SCA Domian
- 微信小程序开发者问题集锦
- 基于Simulink的高速跳频通信系统抗干扰性能
- markdown左对齐
- 手搭深度推荐模型(四) NFM
- Google Perftools简介与使用
- gitlab编译安装史----虽败犹荣
- mysql 事务隔离界别_MySQL数据库事务隔离级别(Transaction Isolation Level)
- Echarts图表效果图(Make A Pie替代)
热门文章
- [bzoj 1030][JSOI2007]文本生成器
- bottle框架学习(四)之模版进阶使用
- 2010.6.20 OA项目组一周工作报告
- Windows Server 2008 计划任务配置(任务计划程序)每分钟执行BAT
- idm下载百度网盘有限制 提示403错误 下载显示没有权限404,最新的解决办法教程
- android support-v4、v7、v13
- ImageView的属性android:scaleType作用
- 一款非常牛逼的 Java 爬虫框架!(请低调使用)
- GitHub又出新功能了,网友:这也太爽了吧。。。
- 并发减库存,怎么保证不超卖?