BZOJ - 1941 Hide and Seek (kd树)
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树)的更多相关文章
- 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 ...
- bzoj 1941 Hide and Seek
题目大意: n个点,求每个点到其最远点距离-到其最近点距离(除自己之外)的最小值 思路: 对于估计函数的理解还不够深刻 #include<iostream> #include<cst ...
- bzoj 2648 SJY摆棋子 kd树
题目链接 初始的时候有一些棋子, 然后给两种操作, 一种是往上面放棋子. 另一种是给出一个棋子的位置, 问你离它最近的棋子的曼哈顿距离是多少. 写了指针版本的kd树, 感觉这个版本很好理解. #inc ...
- BZOJ 1941: [Sdoi2010]Hide and Seek(k-d Tree)
Time Limit: 16 Sec Memory Limit: 162 MBSubmit: 1712 Solved: 932[Submit][Status][Discuss] Descripti ...
- HDU 1941 Hide and Seek(离散化+树状数组)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=1941 题意:给出平面上n个点,找出一点p,使得距离p最近和最远的点的距离之差最小.输出这 ...
- BZOJ1941:[SDOI2010]Hide and Seek(K-D Tree)
Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏- ...
- BZOJ 4066 简单题(KD树)
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=4066 [题目大意] 要求维护矩阵内格子加点和矩阵查询 [题解] 往KD树上加权值点,支 ...
- bzoj 2648 SJY摆棋子 —— K-D树
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2648 学习资料:https://blog.csdn.net/zhl30041839/arti ...
- bzoj:1941: [Sdoi2010]Hide and Seek
1941: [Sdoi2010]Hide and Seek Time Limit: 16 Sec Memory Limit: 162 MBSubmit: 531 Solved: 295[Submi ...
随机推荐
- Hadoop2.7.x中所有的DataNode都启动不了解决办法
参考:Hadoop集群所有的DataNode都启动不了解决办法说明现象:我自己出现这个问题的原因是:自己在namenode格式化之后创建了一些文件,然后重新执行了namenode格式化导致的. 现象就 ...
- 正则表达式:Python3中的应用简介
正则表达式:Python3中的应用简介 一.正则表达式 1,概述 正则表达式,又称规则表达式.(英语:Regular Expression,在代码中常简写为regex.regexp或RE),计算机科学 ...
- Sybase:存储过程中采用临时表存储统计数据
Sybase:存储过程中采用临时表存储统计数据 作用 很有效的提升统计查询速度,对于数据量亿级.千万级多表之间关联查询,非常有效: 使用 --无需定义临时表,直接使用 --自动释放临时表 select ...
- kali 源设置sources.list
由于阿里源有些问题,可能我设置的问题,所以就去掉了,163的很快 # deb cdrom:[Debian GNU/Linux 2016.1 _Kali-rolling_ - Official Snap ...
- Linux中Nginx安装部署
前言 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sys ...
- java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
1.问题描述: 对于创建的springboot项目,通过启动类启动,访问没问题,但打成war部署到tomcat上启动报错,如下: 严重: ContainerBase.addChild: start: ...
- Graph_Master(连通分量_B_Trajan+完全图)
hdu_4635 题目大意:给出一张DAG(n个点,m条边),求出能加的最大边数,使得该图无重边,无自环,非强连通. 题解:这题题面很好理解,也没有什么很难的点,主要是如何求出最大边数需要动点脑筋.首 ...
- Hystrix工作流程图
- 一种根据value解释成枚举的有效方法
有时候需要根据实际情况将某个值解释成一个枚举,而不是根据枚举的名称.如有时0是枚举Gender.MALE的值,1是枚举Gender.FEMALE的值:有时0.1又可以是另一个枚举的值,比如0表示Cer ...
- 解读Mirantis最新的Neutron性能测试
最近,mirantis的工程师发布了最新的基于Mitaka版本的Neutron性能测试结果.得出的结论是:Neutron现在的性能已经可以用生产环境了. 报告的三位作者都是OpenStack社区的活跃 ...