题目链接

kd树模板题,求二维空间上的最远点/最近点。

对所有点建立kd树,分别查询每个点即可。单次查询期望时间复杂度$O(logn)$

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=5e5+,inf=0x3f3f3f3f;
int n,ls[N],rs[N],mx[N][],mi[N][],rt,ans;
struct P {int x[];} a[N];
bool cmpx(P a,P b) {return a.x[]<b.x[];}
bool cmpy(P a,P b) {return a.x[]<b.x[];}
int dis(P a,P b) {return abs(a.x[]-b.x[])+abs(a.x[]-b.x[]);}
void pu(int u) {
for(int i=; i<; ++i) {
mx[u][i]=max(a[u].x[i],max(mx[ls[u]][i],mx[rs[u]][i]));
mi[u][i]=min(a[u].x[i],min(mi[ls[u]][i],mi[rs[u]][i]));
}
}
void build(int& u,int f=,int l=,int r=n) {
if(l>r) {u=; return;}
int mid=(l+r)>>;
u=mid;
if(l==r) {for(int i=; i<; ++i)mx[u][i]=mi[u][i]=a[u].x[i]; return;}
nth_element(a+l,a+mid,a+r+,!f?cmpx:cmpy);
build(ls[u],f^,l,mid-),build(rs[u],f^,mid+,r);
pu(u);
}
int maxd(P p,int u) {
int ret=;
for(int i=; i<; ++i)ret+=max(abs(p.x[i]-mx[u][i]),abs(p.x[i]-mi[u][i]));
return ret;
}
int mind(P p,int u) {
int ret=;
for(int i=; i<; ++i) {
if(mx[u][i]<p.x[i])ret+=p.x[i]-mx[u][i];
if(mi[u][i]>p.x[i])ret+=mi[u][i]-p.x[i];
}
return ret;
}
void qrymaxd(int t,int& x,int u=rt,int f=) {
if(u!=t)x=max(x,dis(a[t],a[u]));
int dl=,dr=;
if(ls[u])dl=maxd(a[t],ls[u]);
if(rs[u])dr=maxd(a[t],rs[u]);
if(dl>dr) {if(dl>x)qrymaxd(t,x,ls[u],f^); if(dr>x)qrymaxd(t,x,rs[u],f^);}
else {if(dr>x)qrymaxd(t,x,rs[u],f^); if(dl>x)qrymaxd(t,x,ls[u],f^);}
}
void qrymind(int t,int& x,int u=rt,int f=) {
if(u!=t)x=min(x,dis(a[t],a[u]));
int dl=inf,dr=inf;
if(ls[u])dl=mind(a[t],ls[u]);
if(rs[u])dr=mind(a[t],rs[u]);
if(dl<dr) {if(dl<x)qrymind(t,x,ls[u],f^); if(dr<x)qrymind(t,x,rs[u],f^);}
else {if(dr<x)qrymind(t,x,rs[u],f^); if(dl<x)qrymind(t,x,ls[u],f^);}
}
int main() {
mx[][]=mx[][]=~inf,mi[][]=mi[][]=inf;
scanf("%d",&n);
for(int i=; i<=n; ++i)scanf("%d%d",&a[i].x[],&a[i].x[]);
build(rt);
ans=inf;
for(int i=; i<=n; ++i) {
int mi=inf,mx=;
qrymaxd(i,mx),qrymind(i,mi);
ans=min(ans,mx-mi);
}
printf("%d\n",ans);
return ;
}

BZOJ - 1941 Hide and Seek (kd树)的更多相关文章

  1. bzoj 1941 Hide and Seek —— K-D树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1941 曼哈顿最小距离估价:max( 0, t[x].mn[i] - v.p[i] ) + m ...

  2. bzoj 1941 Hide and Seek

    题目大意: n个点,求每个点到其最远点距离-到其最近点距离(除自己之外)的最小值 思路: 对于估计函数的理解还不够深刻 #include<iostream> #include<cst ...

  3. bzoj 2648 SJY摆棋子 kd树

    题目链接 初始的时候有一些棋子, 然后给两种操作, 一种是往上面放棋子. 另一种是给出一个棋子的位置, 问你离它最近的棋子的曼哈顿距离是多少. 写了指针版本的kd树, 感觉这个版本很好理解. #inc ...

  4. BZOJ 1941: [Sdoi2010]Hide and Seek(k-d Tree)

    Time Limit: 16 Sec  Memory Limit: 162 MBSubmit: 1712  Solved: 932[Submit][Status][Discuss] Descripti ...

  5. HDU 1941 Hide and Seek(离散化+树状数组)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1941 题意:给出平面上n个点,找出一点p,使得距离p最近和最远的点的距离之差最小.输出这 ...

  6. BZOJ1941:[SDOI2010]Hide and Seek(K-D Tree)

    Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏- ...

  7. BZOJ 4066 简单题(KD树)

    [题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4066 [题目大意] 要求维护矩阵内格子加点和矩阵查询 [题解] 往KD树上加权值点,支 ...

  8. bzoj 2648 SJY摆棋子 —— K-D树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2648 学习资料:https://blog.csdn.net/zhl30041839/arti ...

  9. bzoj:1941: [Sdoi2010]Hide and Seek

    1941: [Sdoi2010]Hide and Seek Time Limit: 16 Sec  Memory Limit: 162 MBSubmit: 531  Solved: 295[Submi ...

随机推荐

  1. maven项目中如何创建web.xml

    在web工程创建时创建web.xml:用Eclipse新建一个web项目没有自动生成web.xml 在创建maven工程时,大多没有创建web.xml文件,web.xml路径:src/main/web ...

  2. Visual Studio各版本区别

    Visual Studio 是微软公司推出的开发环境,Visual Studio 可以用来创建 Windows 平台下的 Windows 应用程序和网络应用程序,也可以用来创建网络服务.智能设备应用程 ...

  3. 20145235李涛《网络对抗》Exp9 Web安全基础实践

    基础问答 SQL注入攻击原理,如何防御? SQL注入攻击就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意SQL命令的目的. 对于SQL注入攻击的防范 ...

  4. Spring Boot 快速入门(IDEA)

    从字面理解,Boot是引导的意思,因此SpringBoot帮助开发者快速搭建Spring框架:SpringBoot帮助开发者快速启动一个Web容器:SpringBoot继承了原有Spring框架的优秀 ...

  5. 使用axis2构建webservice

    axis2是可以实现webservice的一个插件,使用这个插件可以发布webservice 1:可以使用这个插件来发布webservice,可以看网址:http://clq9761.iteye.co ...

  6. jvm-知识点总结

    参考: https://blog.csdn.net/wuqinghai2012/article/details/51485414 http://pengjiaheng.iteye.com/blog/5 ...

  7. quartz(7)-源码分析

    定时器启动 上图通过spring加载quartz <bean id="scheduler" class="org.springframework.schedulin ...

  8. ElasticSearch性能优化

    一.搜索效率优化 批量提交 当有大量数据提交的时候,建议采用批量提交. 比如在做 ELK 过程中 ,Logstash indexer 提交数据到 Elasticsearch 中 ,batch size ...

  9. CocoaPods学习系列4——进阶用法

    这篇文章,记录一下CocoaPods的进阶用法. 进阶用法主要体现在.podspec文件和Podfile的配置上. .podspec文件的进阶配置 以官方的一个.podspec文件示例细说: Pod: ...

  10. scala学习手记5 - 元组与多重赋值

    假定要在一个方法中返回多个值.比如需要返回一个人的名.姓和邮箱地址.在Java中最常用的方法是定义一个Person类,其中包括相对应的字段:还有些不常用的方法就是返回一个集合或数组,拿到结果后再进行循 ...