bzoj 1941 [Sdoi2010]Hide and Seek——KDtree
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1941
第二道KDtree!
枚举每个点,求出距离它的最远和最近距离。O( n * logn )。
曼哈顿最小估价:max( 0 , s[ cr ].x[ 0 ] - a[ k ].p[ 0 ] ) + max( 0 , a[ k ].p[ 0 ] - s[ cr ].y[ 0 ] ) + max( 0 , s[ cr ].x[ 1 ] - a[ k ].p[ 1 ] ) + max( 0 , a[ k ].p[ 1 ] - s[ cr ].y[ 1 ] ) 。
曼哈顿最大估价:max( abs( s[ cr ].x[ 0 ] - a[ k ].p[ 0 ] ) , abs( a[ k ].p[ 0 ] - s[ cr ].y[ 0 ] ) ) + max( abs( s[ cr ].x[ 1 ] - a[ k ].p[ 1 ] ) , abs( a[ k ].p[ 1 ] - s[ cr ].y[ 1 ] ) ) 。
(其中0、1表示横坐标、纵坐标,x、y表示最小、最大)
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=5e5+,INF=0x3f3f3f3f;
int n,rt,ans=INF,fx,tot,mx,mn;
struct Dt{
int x[],y[],p[],ly;//x:min y:max p:ps
}a[N];
bool cmp(Dt u,Dt v){return u.p[fx]<v.p[fx];}
struct KD{
int c[N][],q;Dt s[N];
void add(int cr,int k)
{ for(int i=;i<=;i++)
s[cr].x[i]=s[cr].y[i]=s[cr].p[i]=a[k].p[i], s[cr].ly=k; }
void pshp(int cr)
{
int ls=c[cr][],rs=c[cr][];
for(int i=;i<=;i++)
{
if(ls) s[cr].x[i]=min(s[cr].x[i],s[ls].x[i]),
s[cr].y[i]=max(s[cr].y[i],s[ls].y[i]);
if(rs) s[cr].x[i]=min(s[cr].x[i],s[rs].x[i]),
s[cr].y[i]=max(s[cr].y[i],s[rs].y[i]);
}
}
void build(int &cr,int l,int r,bool now)
{
int mid=l+r>>; fx=now; nth_element(a+l,a+mid,a+r+,cmp);
cr=++tot; add(cr,mid);
if(l<mid) build(c[cr][],l,mid-,!now);
if(mid<r) build(c[cr][],mid+,r,!now);
pshp(cr);
}
int distx(int cr,int k)
{
int ret=;
for(int i=;i<=;i++)
ret+=max(abs(s[cr].x[i]-a[k].p[i]),abs(a[k].p[i]-s[cr].y[i]));
return ret;
}
int distn(int cr,int k)
{
int ret=;
for(int i=;i<=;i++)
ret+=max(,s[cr].x[i]-a[k].p[i])+max(,a[k].p[i]-s[cr].y[i]);
return ret;
}
int dis(Dt u,Dt v){return abs(u.p[]-v.p[])+abs(u.p[]-v.p[]);}
void queryx(int cr,int l,int r)
{
mx=max(mx,dis(s[cr],a[q]));
int ls=c[cr][], rs=c[cr][], mid=l+r>>;
int dl=(ls?distx(ls,q):-INF), dr=(rs?distx(rs,q):-INF);
if(dl>dr)
{ if(dl>mx) queryx(ls,l,mid-); if(dr>mx) queryx(rs,mid+,r);}
else
{ if(dr>mx) queryx(rs,mid+,r); if(dl>mx) queryx(ls,l,mid-);}
}
void queryn(int cr,int l,int r)
{
if(s[cr].ly!=q) mn=min(mn,dis(s[cr],a[q]));
int ls=c[cr][], rs=c[cr][], mid=l+r>>;
int dl=(ls?distn(ls,q):INF), dr=(rs?distn(rs,q):INF);
if(dl<dr)
{ if(dl<mn) queryn(ls,l,mid-); if(dr<mn) queryn(rs,mid+,r);}
else
{ if(dr<mn) queryn(rs,mid+,r); if(dl<mn) queryn(ls,l,mid-);}
}
}kd;
int rdn()
{
int ret=; char ch=getchar();
while(ch>''||ch<'')ch=getchar();
while(ch>=''&&ch<='')ret=(ret<<)+(ret<<)+ch-'',ch=getchar();
return ret;
}
int main()
{
n=rdn();
for(int i=;i<=n;i++)
a[i].p[]=rdn(),a[i].p[]=rdn();
kd.build(rt,,n,);
for(int i=,t1,t2;i<=n;i++)
{
kd.q=i; mx=-INF; mn=INF;
kd.queryx(rt,,n); kd.queryn(rt,,n);
ans=min(ans,mx-mn);
// printf("ans=%d i=%d mx=%d mn=%d\n",ans,i,mx,mn);
}
printf("%d\n",ans);
return ;
}
bzoj 1941 [Sdoi2010]Hide and Seek——KDtree的更多相关文章
- BZOJ 1941: [Sdoi2010]Hide and Seek KDtree + 估价函数
Code: #include<bits/stdc++.h> #define maxn 200000 #define inf 1000000000 using namespace std; ...
- bzoj:1941: [Sdoi2010]Hide and Seek
1941: [Sdoi2010]Hide and Seek Time Limit: 16 Sec Memory Limit: 162 MBSubmit: 531 Solved: 295[Submi ...
- BZOJ 1941: [Sdoi2010]Hide and Seek(k-d Tree)
Time Limit: 16 Sec Memory Limit: 162 MBSubmit: 1712 Solved: 932[Submit][Status][Discuss] Descripti ...
- 【BZOJ1941】[Sdoi2010]Hide and Seek KDtree
[BZOJ1941][Sdoi2010]Hide and Seek Description 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了 ...
- 【54.08%】【BZOJ 1941】Hide and Seek
Time Limit: 16 Sec Memory Limit: 162 MB Submit: 919 Solved: 497 [Submit][Status][Discuss] Descript ...
- 【bzoj1941】[Sdoi2010]Hide and Seek KD-tree
题目描述 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他决定和他的好朋友giPi(鸡皮)玩一个更加寂寞的游戏---捉迷藏. ...
- 【BZOJ-1941】Hide and Seek KD-Tree
1941: [Sdoi2010]Hide and Seek Time Limit: 16 Sec Memory Limit: 162 MBSubmit: 830 Solved: 455[Submi ...
- [BZOJ1941][Sdoi2010]Hide and Seek
[BZOJ1941][Sdoi2010]Hide and Seek 试题描述 小猪iPig在PKU刚上完了无聊的猪性代数课,天资聪慧的iPig被这门对他来说无比简单的课弄得非常寂寞,为了消除寂寞感,他 ...
- 【bzoj1941】[Sdoi2010]Hide and Seek(kd-tree)
bzoj 题意: 给出\(n\)个点,对于每个点,\(d_i\)等于距离其最远的点的距离减去距离最近的点的距离.这里的距离为曼哈顿距离. 求\(min\{d_i\}\). 思路: 考虑直接对每个点暴力 ...
随机推荐
- Entity Framework 4.1 : 贪婪加载和延迟加载
这篇文章将讨论查询结果的加载控制. EF4.1 允许控制对象之间的关系,当我们进行查询的时候,哪些关系的数据将会被加载到内存呢?所有相关的对象都需要吗?在一些场合可能有意义,例如,当查询的实体仅仅拥有 ...
- java拾遗1----XML解析(一) DOM解析
XML解析技术主要有三种: (1)DOM(Document Object Model)文档对象模型:是 W3C 组织推荐的解析XML 的一种方式,即官方的XML解析技术. (2)SAX(Simple ...
- 我的Android进阶之旅------>解决 Error: ShouldNotReachHere() 问题
在Android项目中创建一个包含main()方法的类,直接右键运行该类时会报如下错误: # # An unexpected error has been detected by Java Runti ...
- python+NLTK 自然语言学习处理八:分类文本一
从这一章开始将进入到关键部分:模式识别.这一章主要解决下面几个问题 1 怎样才能识别出语言数据中明显用于分类的特性 2 怎样才能构建用于自动执行语言处理任务的语言模型 3 从这些模型中我们可以学到那些 ...
- Jquery的parent和parents(找到某一特定的祖先元素)用法(转发:https://blog.csdn.net/cui_angel/article/details/7903704)
<!-- parent是指取得一个包含着所有匹配元素的唯一父元素的元素集合. parents则是取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素).可以通过一个可选的表达式进行筛选. ...
- Qt Creator 调试器 在 Ubuntu 13.10下 局部变量和表达式(Locals) 无内容
此篇算是一个翻译,万一有国内同样的小白遇到同样问题,方便参考. 原文http://hostilefork.com/2013/10/20/qtcreator-debugger-no-locals-ubu ...
- Docker的前世今生
核心知识点: 1.Docker的构想:对应用的封装.分发.部署.运行的生命周期的管理,一次封装到处运行 2.Docker的优点:一站式解决方案 3.Docker由LXC演变而来,迟迟没有集成到Linu ...
- HTTP请求解析--从一个请求开始
先来看看一个http请求实例 请求行: POST /chapter17/user.html HTTP/1.1 请求头: Accept: application/json, text/javascrip ...
- web框架之Django<一、初识>
一.什么是web框架 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的 ...
- Android 4.4 U盘挂载【转】
本文转载自:https://blog.csdn.net/mill_li/article/details/50134301 在Android4.4系统下,ES文件浏览器读取不到U盘,但是在设置-> ...