2016 ICPC青岛站---k题 Finding Hotels(K-D树)
2018-06-17 23:35:46来源:未知 阅读 ()
题目链接
http://acm.hdu.edu.cn/showproblem.php?pid=5992
#include <iostream> #include <algorithm> #include <cstring> #include <cstdio> #include <cmath> #include <queue> #include <set> #include <bitset> using namespace std; #define Sqrt2(x) (x)*(x) typedef long long LL; int N,M,idx; struct Node { int f[3]; int id; bool operator<(const Node& s)const { return f[idx]<s.f[idx]; } }data[200005],tr[4*200005]; int flag[4*200005]; pair<LL,Node> ans; void build(int l,int r,int i,int deep) { if(l>r) return; flag[i]=1; flag[i<<1]=0; flag[i<<1|1]=0; idx=deep%2; int mid=(l+r)>>1; nth_element(data+l,data+mid,data+r+1); tr[i]=data[mid]; build(l,mid-1,i<<1,deep+1); build(mid+1,r,i<<1|1,deep+1); } void query(Node p,int i,int deep) { if(!flag[i]) return ; pair<LL,Node> c; c.second=tr[i]; c.first=(LL)(Sqrt2((LL)p.f[0]-tr[i].f[0])+Sqrt2((LL)p.f[1]-tr[i].f[1])); bool fg=0; int idm=deep%2; int x=i<<1; int y=i<<1|1; if(p.f[idm]>=tr[i].f[idm]) swap(x,y); if(flag[x]) query(p,x,deep+1); if(ans.first==-1){ if(c.second.f[2]<=p.f[2]) ans.first=c.first,ans.second=c.second; fg=1; } else { if(c.second.f[2]<=p.f[2]&&(c.first<ans.first||(c.first==ans.first&&c.second.id<ans.second.id))) ans.first=c.first,ans.second=c.second; if((LL)(Sqrt2(tr[i].f[idm]-p.f[idm]))<ans.first) fg=1; } if(fg&&flag[y]) query(p,y,deep+1); } int main() { int T; cin>>T; while(T--) { scanf("%d%d",&N,&M); for(int i=1;i<=N;i++) { for(int j=0;j<3;j++) scanf("%d",&data[i].f[j]); data[i].id=i; } build(1,N,1,0); while(M--) { Node p; for(int i=0;i<3;i++) scanf("%d",&p.f[i]); ans.first=-1; query(p,1,0); printf("%d %d %d\n",ans.second.f[0],ans.second.f[1],ans.second.f[2]); } } return 0; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 2020年3月28日UCF Local Programming Contest 2016 2020-03-31
- 洛谷P4071-[SDOI2016]排列计数 题解 2020-01-12
- 2019 ICPC 银川站 2019-12-11
- 统计字符的个数,能够组成几个acmicpc 2019-10-16
- [NOIP2016]天天爱跑步-题解 2019-10-08
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash