题目链接

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. angularjs中directive声明scope对象的用法

    总的来说用法 分三种: >1: scope: false  --> 继承父域,实现 双向数据绑定 示例代码 可自测: <!DOCTYPE html> <html lang ...

  2. J.U.C之AQS

    AQS是J.U.C的核心 AQS(AbstractQueuedSynchronizer)队列同步器,AQS是JDK下提供的一套用于实现基于FIFO等待队列的阻塞锁和相关的同步器的一个同步框架. 同步器 ...

  3. React Native常用组件之ScrollView组件

    一.前言 从iOS开发的经验来看,scrollView无疑是移动开发中很重要的一个组件,比如后面会学到的ListView就是继承自它.那么,在开发中比如:焦点图.引导页等地方都有其的影子,那接下来我们 ...

  4. Spring_事务-注解代码

    applicationContext.xml <?xml version="1.0" encoding="UTF-8"?><beans xml ...

  5. hibernate 实体对象的三种状态以及转换关系。

    最新的Hibernate文档中为Hibernate对象定义了四种状态(原来是三种状态,面试的时候基本上问的也是三种状态),分别是:瞬时态(new, or transient).持久态(managed, ...

  6. nginx 中location和root、alias

    nginx指定文件路径有两种方式root和alias,这两者的用法区别 root与alias主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件 ...

  7. JavaWeb -- Struts2 ResultType细化, 国际化

    1. ResultType细化 <result-types> <result-type name="chain" class="com.opensymp ...

  8. poj 1787 背包+记录路径

    http://poj.org/problem?id=1787 Charlie's Change Time Limit: 1000MS   Memory Limit: 30000K Total Subm ...

  9. http Code含义

    5xx - 服务器错误 服务器由于遇到错误而不能完成该请求.

  10. 使用ZooKeeper实现Java跨JVM的分布式锁(优化构思)

    一.使用ZooKeeper实现Java跨JVM的分布式锁 二.使用ZooKeeper实现Java跨JVM的分布式锁(优化构思) 三.使用ZooKeeper实现Java跨JVM的分布式锁(读写锁) 说明 ...