bzoj 2648
来源:互联网 发布:淘宝玻璃茶具销量前十 编辑:程序博客网 时间:2024/05/29 17:20
kd_tree;
目前仍理解不足…
#include<bits/stdc++.h>#define rep(i,k,n) for(int i=k;i<=n;i++)using namespace std;const int N=500005;const int inf=0x7f7f7f7f;struct P{ int d[2],mn[2],mx[2],l,r; int& operator[](int x){return d[x];} P(int x=0,int y=0) {l=0,r=0;d[0]=x,d[1]=y;} }p[N];int n,m,root=0,D;bool operator<(P a,P b){return a[D]<b[D];}struct kd_tree{ P t[2*N],T; int ans; void up(int x){ P l=t[t[x].l],r=t[t[x].r]; if(t[x].l)rep(i,0,1)t[x].mn[i]=min(t[x].mn[i],l.mn[i]),t[x].mx[i]=max(t[x].mx[i],l.mx[i]); if(t[x].r)rep(i,0,1)t[x].mn[i]=min(t[x].mn[i],r.mn[i]),t[x].mx[i]=max(t[x].mx[i],r.mx[i]); } void build(int& x,int l,int r,int now){ if(l>r)return; D=now; int mid=(l+r)>>1; nth_element(p+l,p+mid,p+r+1); x=mid; t[x]=p[mid]; t[x].mn[0]=t[x].mx[0]=t[x][0]; t[x].mn[1]=t[x].mx[1]=t[x][1]; build(t[x].l,l,mid-1,now^1); build(t[x].r,mid+1,r,now^1); up(x); } inline int dis(P a,P b){return abs(a[0]-b[0])+abs(a[1]-b[1]);} int get(int k,P x){ int tmp=0; rep(i,0,1)tmp+=max(0,t[k].mn[i]-x[i]); rep(i,0,1)tmp+=max(0,x[i]-t[k].mx[i]); return tmp; } void ins(int x,int now){ if(T[now]<t[x][now]){ if(t[x].l)ins(t[x].l,now^1); else{ t[x].l=++n;t[n]=T; rep(i,0,1)t[n].mn[i]=t[n].mx[i]=t[n][i]; } } else{ if(t[x].r)ins(t[x].r,now^1); else{ t[x].r=++n;t[n]=T; rep(i,0,1)t[n].mn[i]=t[n].mx[i]=t[n][i]; } } up(x); } void que(int x){ int d,d1=inf,d2=inf; d=dis(t[x],T); ans=min(ans,d); if(t[x].l)d1=get(t[x].l,T); if(t[x].r)d2=get(t[x].r,T); if(d1<d2){ if(d1<ans)que(t[x].l); if(d2<ans)que(t[x].r); } else{ if(d2<ans)que(t[x].r); if(d1<ans)que(t[x].l); } } void insert(P x){ T=x;ins(root,0); } int query(P x){ ans=inf;T=x;que(root); return ans; }}kd;int main(){//freopen("in.in","r",stdin); scanf("%d%d",&n,&m); rep(i,1,n){scanf("%d%d",&p[i][0],&p[i][1]);} kd.build(root,1,n,0); int op,x,y; while(m--) { scanf("%d%d%d",&op,&x,&y); if(op==1)kd.insert(P(x,y)); else printf("%d\n",kd.query(P(x,y))); } return 0;}
0 0
- bzoj 2648
- BZOJ 2648 (kdtree)
- [BZOJ ]
- BZOJ****-****
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- BZOJ
- bzoj
- bzoj
- BZOJ
- BZOJ
- cocospod 搭建环境和使用
- 2016.4.4HTML表格,列表,块,布局
- 两个Activity之间的观察者模式
- IOC控制反转
- Gson解析数据使用笔记
- bzoj 2648
- 思考未来(一)
- 《MySQL必知必会学习笔记》:插入数据
- 关闭 dialog
- 【编程之法】A.1 语言基础
- Linux应用程序地址布局
- Ubuntu下安装Python3.5
- bzoj 2733: [HNOI2012]永无乡
- View的测量