博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 2966 In case of failure(KD-tree)
阅读量:4321 次
发布时间:2019-06-06

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

题目链接:

题意:

给你n个点,让你输出每个点到最近点的欧式距离。

题解:

KD-树裸题,板子抄的鸟神的。

1 #include
2 #define F(i,a,b) for(int i=(a);i<=(b);++i) 3 using namespace std; 4 using ll=long long; 5 6 namespace KD_Tree{ 7 const int N=1e5+7,DI=2; 8 struct Node{ 9 int p[DI],f,l,r,mx[DI],mi[DI];10 int operator[](const int&idx)const{
return p[idx];}11 void in(int idx,int *v){f=idx;F(i,0,DI-1)p[i]=v[i];}12 void up(Node&a){13 F(i,0,DI-1){14 mi[i]=min(mi[i],a.mi[i]);15 mx[i]=max(mx[i],a.mx[i]);16 }17 }18 }T[N];19 int idx[N],cmpd,root;20 21 bool cmp(const Node&a,const Node&b){
return a[cmpd]
>1;29 cmpd=d%DI,nth_element(T+l,T+mid,T+r+1,cmp);30 idx[T[mid].f]=mid,T[mid].f=f;31 F(i,0,DI-1)T[mid].mi[i]=T[mid].mx[i]=T[f][i];32 T[mid].l=l!=mid?build(l,mid-1,d+1,mid):0;33 T[mid].r=r!=mid?build(mid+1,r,d+1,mid):0;34 return up(mid),mid;35 }36 ll dist(ll x,ll y=0){
return x*x+y*y;}37 ll query(ll x,ll y,ll&ans,int rt=root,int d=0)38 {39 ll tmp=dist(x-T[rt][0],y-T[rt][1]);40 if(tmp)ans=min(ans,tmp);41 if(T[rt].l&&T[rt].r)42 {43 bool is=!d?(x<=T[rt][0]):(y<=T[rt][1]);44 ll dis=!d?dist(x-T[rt][0]):dist(y-T[rt][1]);45 query(x,y,ans,is?T[rt].l:T[rt].r,!d);46 if(dis
View Code

 

转载于:https://www.cnblogs.com/bin-gege/p/7299644.html

你可能感兴趣的文章
AES加密算法动画演示
查看>>
三种方法实现调用Restful接口
查看>>
php第五节(字符串函数和时间、日期函数)
查看>>
magento主页限制某个目录的产品显示数量
查看>>
SpringBoot整合Netty
查看>>
MongoDB数据库的基本操作
查看>>
PAT乙级1014
查看>>
ORACLE wm_concat自定义
查看>>
[Zend PHP5 Cerification] Lectures -- 6. Database and SQL
查看>>
[Drupal] Using the Administrator theme whenever you want.
查看>>
【Hibernate框架】关联映射(一对一关联映射)
查看>>
【算法】大数乘法
查看>>
WPF解析PPT为图片
查看>>
JavaScrict中的断言调试
查看>>
密码服务
查看>>
结构体在内存中的存储
查看>>
冲刺阶段—个人工作总结01
查看>>
基于Python的Webservice开发(二)-如何用Spyne开发Webservice
查看>>
PowerDesigner修改设计图中文字的字体大小等样式
查看>>
Python list和 np.Array 的转换关系
查看>>