这个题其实应该算4个二维偏序,因为枚举每个点可以根据公式分成4个象限,4种计算方式,所以就考虑怎么求x和y的大小关系集合

首先,按x排序再枚举,可以保证后面的x大于前面的x,就相当于分成了两部分,剩下的就是区分y的大小关系,相当于是在两个x的区间里找一个值左侧和右侧的信息,

如果分成4个信息,就相当于维护四个值:x+y,x-y,y-x,-x-y的最大最小值,   对于查询,就是标准的线段树问题,

所以动态维护线段树,在四个面里取最值就可以了

码:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
#define zuo o<<1,l,mid
#define you o<<1|1,mid+1,r
#define N 100005
int xyd[N<<2],xyx[N<<2],fxyd[N<<2],fxyx[N<<2],fxfyd[N<<2],fxfyx[N<<2],xfyx[N<<2],xfyd[N<<2],a,b,maxx,minn,ans=999999999,op,i,n,dui[N];
struct la
{int x,y,id;
}d[N],D[N];
bool cmp(la a,la b)
{if(a.x==b.x)return a.y<b.y;else return a.x<b.x;
}
bool cmp2(la a,la b)
{if(a.y==b.y)return a.x<b.x;else return a.y<b.y;
}
void up(int o)
{int ll=o<<1,rr=o<<1|1;
xyd[o]=max(xyd[ll],xyd[rr]);
fxyd[o]=max(fxyd[ll],fxyd[rr]);
xfyd[o]=max(xfyd[ll],xfyd[rr]);
fxfyd[o]=max(fxfyd[ll],fxfyd[rr]);
xyx[o]=min(xyx[ll],xyx[rr]);
fxyx[o]=min(fxyx[ll],fxyx[rr]);
xfyx[o]=min(xfyx[ll],xfyx[rr]);
fxfyx[o]=min(fxfyx[ll],fxfyx[rr]);
}
void jian(int o,int l,int r)
{
if(l==r)
{xfyx[o]=fxfyx[o]=fxyx[o]=999999999;xfyd[o]=fxfyd[o]=fxyd[o]=-999999999;xyx[o]=xyd[o]=D[l].x+D[l].y;fxyx[o]=fxyd[o]=D[l].y-D[l].x;   return ;
}int mid=(l+r)>>1;jian(zuo);jian(you);  up(o);
}
void gai(int o,int l,int  r)
{if(a<=l&&r<=b){if(op==0){xyx[o]=fxyx[o]=999999999;xyd[o]=fxyd[o]=-999999999;} if(op==1){xfyx[o]=xfyd[o]=D[l].x-D[l].y;fxfyx[o]=fxfyd[o]=-D[l].y-D[l].x;                    }if(op==2){minn=min(minn,d[i].x-d[i].y-xfyd[o]); maxx=max(maxx,d[i].x-d[i].y-xfyx[o]);          }if(op==3){minn=min(minn,d[i].x+d[i].y+fxfyx[o]);  maxx=max(maxx,d[i].x+d[i].y+fxfyd[o]);           }   if(op==4){minn=min(minn,xyx[o]-(d[i].x+d[i].y));    maxx=max(maxx,xyd[o]-(d[i].x+d[i].y));            }       if(op==5){minn=min(minn,d[i].y-d[i].x-fxyd[o]);  maxx=max(maxx,d[i].y-d[i].x-fxyx[o]);          }return;}int mid=(l+r)>>1;if(a<=mid)gai(zuo);if(b>mid)gai(you);up(o);
}
int main()
{scanf("%d",&n);for(i=1;i<=n;i++){scanf("%d%d",&d[i].x,&d[i].y); d[i].id=i;D[i]=d[i];  }sort(d+1,d+1+n,cmp);sort(D+1,D+1+n,cmp2);for(i=1;i<=n;i++){dui[D[i].id]=i;       }jian(1,1,n);for(i=1;i<=n;i++){op=0;//清除右面的 a=b=dui[d[i].id];gai(1,1,n);minn=999999999;maxx=-999999999;//计算 op=2;a=dui[d[i].id]+1;b=n;  //找左上角 if(a<=b)gai(1,1,n);op=3;a=1;b=dui[d[i].id]-1;  //找左下角 if(a<=b)gai(1,1,n); op=4;a=dui[d[i].id]+1;b=n;  //找右上角 if(a<=b)gai(1,1,n);      op=5;a=1;b=dui[d[i].id]-1;  //找右下角 if(a<=b)gai(1,1,n);       ans=min(maxx-minn,ans);            op=1;//加入左面的
a=b=dui[d[i].id];gai(1,1,n);}printf("%d",ans);
}

bzoj1941 [Sdoi2010]Hide and Seek 线段树相关推荐

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

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

  2. 【BZOJ-1095】[ZJOI2007] Hide 捉迷藏【线段树维护树直径】

    题意: nnn 个点的一棵树,每个点初始为 000,支持两种操作,第一种操作 CxC \ xC x,表示将第 xxx 个点取反,即 111 变 000,000 变 111.第二种操作为 GGG,表示查 ...

  3. BZOJ 1941: [Sdoi2010]Hide and Seek KDtree + 估价函数

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

  4. 【BZOJ 1095】 1095: [ZJOI2007]Hide 捉迷藏 (括号序列+线段树)

    1095: [ZJOI2007]Hide 捉迷藏 Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩 捉迷藏游 ...

  5. bzoj1095: [ZJOI2007]Hide 捉迷藏 线段树维护括号序列 点分治 链分治

    这题真是十分难写啊 不管是点分治还是括号序列都有一堆细节.. 点分治:时空复杂度$O(n\log^2n)$,常数巨大 主要就是3个堆的初始状态 C堆:每个节点一个,为子树中的点到它父亲的距离的堆. B ...

  6. 2019.03.21【ZJOI2007】【BZOJ1095】【洛谷P2056】Hide 捉迷藏(DFS序)(线段树)

    BZOJ传送门 洛谷传送门 解析: 其实就是QTREE4的弱化版,可以直接用QTREE4的解法来做. 但是这道题有优秀的O(nlog⁡n)O(n\log n)O(nlogn)做法. 我们考虑利用DFS ...

  7. 【bzoj1905】捉迷藏(线段树)

    Description 捉迷藏 Jiajia和Wind是一对恩爱的夫妻,并且他们有很多孩子.某天,Jiajia.Wind和孩子们决定在家里玩捉迷藏游戏.他们的家很大且构造很奇特,由N个屋子和N-1条双 ...

  8. BZOJ 3730: 震波 动态树分治 线段树 lca

    3730: 震波 Time Limit: 15 Sec  Memory Limit: 256 MB Submit: 1202  Solved: 288 [Submit][Status][Discuss ...

  9. 二逼平衡树——树套树(线段树套Splay平衡树)

    题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...

最新文章

  1. greta的问题及解决: LIBCMTD.lib(_wctype.obj) : error LNK2005: _iswspace already defined in xxx.obj...
  2. 可怜的Java EE,这次会不会劫数难逃?
  3. Error creating bean with name ‘org.springframework.security.oauth2.config.annotation.web.configurati
  4. oracle to pgsql,PostgresToOracle
  5. php substr_replace 中文乱码,php substr_replace替换字符串一些实例_PHP教程
  6. 法拉第未来宣布汉福德工厂获得最终生产使用资质
  7. 01_Java概述_public class和class的区别1
  8. Codeforces Round #503 (by SIS, Div. 2) C. Elections
  9. 软件测试岗位,BAT大厂面试题集锦
  10. matlab ds18b20 单片机,基于51单片机ds18b20温度检测————设计报告.doc
  11. NekoHTML学习笔记
  12. 财务自开发系统的一些想法(实现篇)
  13. HZ 和 usleep最小睡眠时间(低精度定时器)
  14. 如何设置自定义任务栏图标_轻松自定义Windows 7任务栏图标
  15. 地理坐标系,投影坐标系区别
  16. IPv6网络的可操作安全考虑——RFC9099解析(一)
  17. 致四个月后自己的一封信
  18. C#委托和事件的概念
  19. 机器学习_正规方程(最小二乘法)的推导
  20. 1198:逆波兰表达式(递归)

热门文章

  1. php登录后自动退出登录,PHP利用Cookie设置用户30分钟未操作自动退出功能
  2. c++实验七-—项目2
  3. MATLAB_排列组合_摸球组合生成
  4. qq批量登录软件_把微信PC版越甩越远!QQ电脑版这些新功能太良心
  5. while用法_when 和 while 的用法区别
  6. python代码_抢球鞋?预测股市走势?淘宝秒杀?Python表示要啥有啥 - 街角的守望。...
  7. Java流程控制01 用户交互Scanner
  8. replace为undefined_手写 XML 转化为 JS对象 方法
  9. 电脑微信扫一扫在哪_怎么进入和管理企业微信的后台?
  10. 微型计算机中的80586指,一级B考试模拟试题-套,DOS版本:6.0