2716: [Violet 3]天使玩偶&&2648: SJY摆棋子|K-DTree
来源:互联网 发布:史丹利的寓言 mac 编辑:程序博客网 时间:2024/05/22 07:06
双倍经验QAQ
kd树裸题,估价函数千万不要自己乱YY
#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<queue>#include<vector>#include<set>#include<map>#include<iostream>#include<algorithm>#define N 1000022using namespace std;int sc(){ int i=0,f=1; char c=getchar(); while(c>'9'||c<'0'){if(c=='-')f=-1;c=getchar();} while(c>='0'&&c<='9')i=i*10+c-'0',c=getchar(); return i*f;}struct W{ int d[2],mn[2],mx[2],l,r;}t[N],now;int n,m,cnt,root,D,ans;bool cmp(W a,W b){ return a.d[D]<b.d[D];}#define L t[x].l#define R t[x].rvoid push_up(int x){ for(int i=0;i<=1;i++) t[x].mx[i]=max(t[x].d[i],max(t[L].mx[i],t[R].mx[i])), t[x].mn[i]=min(t[x].d[i],min(t[L].mn[i],t[R].mn[i]));}void build(int &x,int l,int r,int dir){ D=dir;x=l+r>>1; nth_element(t+l,t+x,t+r+1,cmp); if(l<x)build(L,l,x-1,dir^1); if(x<r)build(R,x+1,r,dir^1); push_up(x);}void insert(int &x,int d){ if(!x) x=++cnt, t[x]=now; else if(now.d[d]<t[x].d[d]) insert(L,d^1); else insert(R,d^1); push_up(x);}int dis(int x,W y){ return abs(t[x].d[0]-y.d[0])+abs(t[x].d[1]-y.d[1]);}int cal(int x){ return max(t[x].mn[0]-now.d[0],0)+max(now.d[0]-t[x].mx[0],0)+ max(t[x].mn[1]-now.d[1],0)+max(now.d[1]-t[x].mx[1],0);}void query(int x){ if(!x)return; ans=min(ans,dis(x,now)); int cl=1e9,cr=1e9; if(L)cl=cal(L);if(R)cr=cal(R); if(cl<cr) { if(cl<ans)query(L); if(cr<ans)query(R); }else { if(cr<ans)query(R); if(cl<ans)query(L); }}int main(){ t[0].mn[0]=t[0].mn[1]=1e9; t[0].mx[0]=t[0].mx[1]=-1e9; cnt=n=sc(),m=sc(); for(int i=1;i<=n;i++) t[i].d[0]=sc(),t[i].d[1]=sc(); build(root,1,n,0); while(m--) { int t=sc(); now.d[0]=sc(); now.d[1]=sc(); if(t==1) insert(root,0); else { ans=1e9; query(root); printf("%d\n",ans); } } return 0;}
0 0
- 2716: [Violet 3]天使玩偶&&2648: SJY摆棋子|K-DTree
- 【BZOJ 2716/2648】 [Violet 3]天使玩偶 SJY摆棋子
- BZOJ 2648 SJY摆棋子 / 2716 Violet 3 天使玩偶 K-D树
- 2648: SJY摆棋子/2716: [Violet 3]天使玩偶 K-D tree
- [KD-TREE] BZOJ 2648 SJY摆棋子 & BZOJ 2716 [Violet 3]天使玩偶
- BZOJ 2648: SJY摆棋子/BZOJ 2716: [Violet 3]天使玩偶 kdtree
- BZOJ 2648/2716 SJY摆棋子/[Violet 3]天使玩偶 kd tree
- BZOJ_P2648 SJY摆棋子&BZOJ_P2716 [Violet 3]天使玩偶(KD-Tree)
- 【bzoj2648&bzoj2716】[Violet 3]天使玩偶&SJY摆棋子【kd树】
- KD_Tree 【bzoj2648 && bzoj2716】SJY摆棋子 && [voilet 3] 天使玩偶
- [BZOJ2648]SJY摆棋子 k-dtree
- 【BZOJ】【P2648&P2716】【SJY摆棋子】【天使玩偶】【题解】【kdtree】
- 【BZOJ 2716&2648】[Violet 3]天使玩偶 k-d tree
- 【BZOJ 2716/2648】 [Violet 3]天使玩偶
- 2648: SJY摆棋子
- BZOJ 2716 [Violet 3]天使玩偶 KDtree
- 【BZOJ 2648/2716】SJY摆棋子
- bzoj2716: [Violet 3]天使玩偶
- 深入Java虚拟机读书笔记之高效并发
- Android spannableStringBuilder用法整理
- Andrew Ng 机器学习笔记(六)
- netty在游戏服务器开发中的应用(二)--配置启动服务器
- 平衡二叉树
- 2716: [Violet 3]天使玩偶&&2648: SJY摆棋子|K-DTree
- stl之序列容器——vector
- LeetCode 之 Unique Paths
- 正确配置Linux系统ulimit值的方法
- 每日一搜——poj搜索题目分类
- java—1.面向对象与内存分析
- 重载operator ->的说明 http://blog.csdn.net/todototry/article/details/1481185
- python项目之 抓取动态网页 抓取路由器客户
- uvm 与 system verilog的理解