博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LuoguP4357 [CQOI2016]K远点对
阅读量:5052 次
发布时间:2019-06-12

本文共 2030 字,大约阅读时间需要 6 分钟。

kd-tree

 

#include
#define lc (ch[x][0])#define rc (ch[x][1])#define ll long longusing namespace std;const int maxn=1e6+4;int n,m,cnt;ll mn[maxn][2],mx[maxn][2],ch[maxn][2],sz[maxn];int nthdir;priority_queue
,greater
>q;inline ll sq(ll x){ return (ll)x*x;}struct Point{ ll pos[2]; ll& operator [](ll x){ return pos[x]; } bool operator < (const Point &t) const { return pos[nthdir] < t.pos[nthdir]; } ll operator - (const Point &t) const { return sq(abs(pos[0]-t.pos[0]))+sq(abs(pos[1]-t.pos[1])); } Point(int x,int y){ pos[0]=x;pos[1]=y; } Point(){};}p[maxn];inline void pushup(int x){ for(int i=0;i<=1;i++){ mn[x][i]=mx[x][i]=p[x][i]; if(lc){ mn[x][i]=min(mn[x][i],mn[lc][i]); mx[x][i]=max(mx[x][i],mx[lc][i]); } if(rc){ mn[x][i]=min(mn[x][i],mn[rc][i]); mx[x][i]=max(mx[x][i],mx[rc][i]); } } sz[x]=sz[lc]+sz[rc]+1;}inline int build(int l,int r,int dir){ nthdir=dir; int x=(l+r)>>1; nth_element(p+l,p+x,p+r+1); mn[x][0]=mx[x][0]=p[x][0]; mn[x][1]=mx[x][1]=p[x][1]; if(l
x) rc=build(x+1,r,dir^1); pushup(x);return x;}inline ll calc(int x,Point P){ return max(sq(mn[x][0]-P[0]),sq(mx[x][0]-P[0]))+max(sq(mn[x][1]-P[1]),sq(mx[x][1]-P[1]));}inline void query(int x,Point P){ ll h=P-p[x]; if(h>q.top()){ q.pop(); q.push(h); } ll l=0,r=0; if(lc) l=calc(lc,P); if(rc) r=calc(rc,P); if(l>r){ if(l>q.top()) query(lc,P); if(r>q.top()) query(rc,P); }else{ if(r>q.top()) query(rc,P); if(l>q.top()) query(lc,P); }}int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d%d",&p[i][0],&p[i][1]); cnt=n; int rt=build(1,n,0); for(int i=1;i<=m*2;i++) q.push(0); for(int i=1;i<=n;i++){ query(rt,p[i]); } cout<

 

转载于:https://www.cnblogs.com/wifimonster/p/10509898.html

你可能感兴趣的文章
sql server中index的REBUILD和REORGANIZE的区别及工作方式
查看>>
sql server升级打补丁
查看>>
ubuntu10.04安装x264库
查看>>
772002画马尾
查看>>
PHP传值和传引用、传地址的区别
查看>>
【Leetcode】Search in Rotated Sorted Array II
查看>>
蓬佐错觉:蓬佐错觉
查看>>
Redis:目录
查看>>
[usaco3.3.2]shopping
查看>>
分享一下:2011回顾:20个将JavaScript推到极致的网站(转)
查看>>
作业5.2 对5.1内容的完善体会
查看>>
使用antd UI 制作菜单
查看>>
五分钟入门 Dingo API
查看>>
带入gRPC:对 RPC 方法做自定义认证
查看>>
HP下kafka的实践
查看>>
Buffer.compare()
查看>>
buf.writeInt32BE()函数详解
查看>>
网络编程-Python的socket库
查看>>
●数组及应用举例
查看>>
Ajax表单提交插件jquery form
查看>>