BZOJ 2716 [Violet 3]天使玩偶 ——KD-Tree
【题目分析】
KD-Tree的例题。同BZOJ2648.
【代码】
#include <cstdio> #include <cstring> #include <cstdlib> #include <cmath> #include <set> #include <map> #include <string> #include <algorithm> #include <vector> #include <iostream> #include <queue> using namespace std; #define maxn 1000005 #define inf 1e9 int read() { int x=0,f=1; char ch=getchar(); while (ch<'0'||ch>'9') {if (ch=='-') f=-1; ch=getchar();} while (ch>='0'&&ch<='9') {x=x*10+ch-'0'; ch=getchar();} return x*f; } struct node{ int mn[2],mx[2],d[2],l,r; int operator [] (int x) {return d[x];} void init() {d[0]=read(); d[1]=read();} }t[maxn],now; int root,D,n,m,tot=0,ans; int dis(node a,node b){return abs(a[1]-b[1])+abs(a[0]-b[0]);} bool operator < (node a,node b){return a[D]<b[D]||(a[D]==b[D]&&a[D^1]<b[D^1]);} void update(int k) { for (int i=0;i<2;++i) { t[k].mn[i]=min(t[k][i],min(t[t[k].l].mn[i],t[t[k].r].mn[i])); t[k].mx[i]=max(t[k][i],max(t[t[k].l].mx[i],t[t[k].r].mx[i])); } } int build(int l,int r,int dir) { int mid=(l+r)/2; D=dir; nth_element(t+l,t+mid,t+r+1); for (int i=0;i<2;++i) t[mid].mn[i]=t[mid].mx[i]=t[mid][i]; if (l<mid) t[mid].l=build(l,mid-1,dir^1); if (r>mid) t[mid].r=build(mid+1,r,dir^1); update(mid); return mid; } void ins(int & k,int dir) { if (!k) { k=++tot; t[k]=now; for (int i=0;i<2;++i) t[k].mn[i]=t[k].mx[i]=t[k][i]; return ; } if (now[dir]<t[k][dir]||(now[dir]==t[k][dir]&&now[dir^1]<t[k][dir^1])) ins(t[k].l,dir^1); else ins(t[k].r,dir^1); update(k); } int get(int k) { if (!k) return inf; int ret=0; for (int i=0;i<2;++i) ret+=max(0,t[k].mn[i]-now[i]); for (int i=0;i<2;++i) ret+=max(0,now[i]-t[k].mx[i]); return ret; } void query(int k) { int dl=get(t[k].l),dr=get(t[k].r),d0=dis(t[k],now); ans=min(ans,d0); if (dl<dr) { if (dl<ans) query(t[k].l); if (dr<ans) query(t[k].r); } else { if (dr<ans) query(t[k].r); if (dl<ans) query(t[k].l); } } int main() { for (int i=0;i<2;++i) t[0].mn[i]=inf,t[0].mx[i]=-inf; n=read();m=read();tot=n; for (int i=1;i<=n;++i) t[i].init(); root=build(1,n,0); while (m--) { int opt=read(); now.init(); if (opt==1) ins(root,0); else { ans=inf; query(root); printf("%d\n",ans); } } }
BZOJ 2716 [Violet 3]天使玩偶 ——KD-Tree的更多相关文章
- BZOJ 2716: [Violet 3]天使玩偶
2716: [Violet 3]天使玩偶 Time Limit: 80 Sec Memory Limit: 128 MBSubmit: 1473 Solved: 621[Submit][Statu ...
- BZOJ 2716: [Violet 3]天使玩偶( CDQ分治 + 树状数组 )
先cdq分治, 然后要处理点对答案的贡献, 可以以询问点为中心分成4个区域, 然后去掉绝对值(4种情况讨论), 用BIT维护就行了. --------------------------------- ...
- bzoj 2716 [Violet 3]天使玩偶——KDtree
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2716 第三道KDtree!仍旧是模板.还有CDQ分治做法,见下面. 数组迷之开大?(开6e5 ...
- BZOJ 2716 [Violet 3]天使玩偶 (CDQ分治、树状数组)
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=2716 怎么KD树跑得都那么快啊..我写的CDQ分治被暴虐 做四遍CDQ分治,每次求一个 ...
- BZOJ 2716 Violet 3 天使玩偶 CDQ分治
题目大意:初始给定平面上的一个点集.提供两种操作: 1.将一个点增加点集 2.查询距离一个点最小的曼哈顿距离 K-D树是啥...不会写... 我仅仅会CDQ分治 对于一个询问,查询的点与这个点的位置关 ...
- bzoj 2716 [Violet 3]天使玩偶 【CDQ分治】
KD-tree可做,但是我不会暂时不考虑 大意:在二维平面内,给定n个点,m个操作.操作A:加入一个点:操作B:询问一个点与平面上加入的点的最近距离 不封装会T不封装会T不封装会T不封装会T不封装会 ...
- 【BZOJ-2648&2716】SJY摆棋子&天使玩偶 KD Tree
2648: SJY摆棋子 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 2459 Solved: 834[Submit][Status][Discu ...
- 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显得无聊. ...
随机推荐
- NIS 报错No such map passwd.byname. Reason: Can't bind to server which serves this domain
在NIS—client端使用命令:ypcat passwd ,把错如上题, 原因:client端ypbind服务未启动解决方法:当然是启动ypbind了,命令:service ypbind start ...
- win8访问win7中的共享文件夹 映射网络驱动器
同一个局域网内,配置好了一台win7(假设计算机名为A)的共享文件夹,设置方法可以参考http://www.doudouxitong.com/guzhang/xitongjiqiao/2014/082 ...
- Android笔记:菜单
1.按键调出菜单 public boolean onCreateOptionsMenu(Menu menu) 重写建立菜单方法 public boolean onOptionsItemSelected ...
- 25个增强iOS应用程序性能的提示和技巧(高级篇)(2)
25个增强iOS应用程序性能的提示和技巧(高级篇)(2) 2013-04-16 14:56 破船之家 beyondvincent 字号:T | T 在开发iOS应用程序时,让程序具有良好的性能是非常关 ...
- October 8th 2016 Week 41st Saturday
When ambition ends, happiness begins. 野心消亡之日,正是快乐破茧之时. If I don't have the wish to be a useful man, ...
- DOM对象与JQUERY对象的相互转化
普通处理,通过标准JavaScript处理: 1 var p = document.getElementById('imooc') 2 p.innerHTML = '您好!学习jQuery才是最佳的途 ...
- 图像特征提取之LBP特征
LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子:它具有旋转不变性和灰度不变性等显著的优点.它是首先由T. Ojala, M.Pietik?inen ...
- python处理html的table标签
转载:http://www.xuebuyuan.com/583071.html python处理html的table标签 2012年01月06日 ⁄ 综合 ⁄ 共 5279字 ⁄ 字号 小 中 大 ⁄ ...
- Loadrunner之API测试
//API函数 web_submit_data web_custom_request //支持https请求 web_set_sockets_option("SSL_VERSION&qu ...
- hdu 2027统计元音
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2027 思路:主要考察gets()函数用法,能够接受输入的空格,如果用%s或是cin>>st ...