HDU 5820 Lights(扫描线+zkw线段树)
【题目链接】 http://acm.hdu.edu.cn/showproblem.php?pid=5820
【题目大意】
在一个大小为50000*50000的矩形中,有n个路灯。
询问是否每一对路灯之间存在一条道路,使得长度为|x1–x2|+|y1–y2|且每个拐弯点都是路灯。
【题解】
只要找到不共线的两个点,他们所构成的矩阵剩余的两个点都是不存在的,那么这个图就是违法的。那么如何找呢,我们将所有点按照x为第一关键字,y为第二关键字排序,逐行扫描,对于每个点,扫描与他同行的前后两个点的列坐标形成的区间,如果这个区间出现x坐标比这个点所在列上一个出现的点要大,那么就是非法的。所以剩下的就是线扫描和rmq问题了。
【代码】
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int U=50000,N=500005;
int L,R,n,T[U<<2],v[N],x,y,M,ans;
struct data{int x,y;}p[N];
bool cmp(data a,data b){return a.x==b.x?a.y<b.y:a.x<b.x;}
bool check(){
memset(T,0,sizeof(T));
for(L=0,R=-1;L<n;L=R+1){
while(R+1<n&&p[R+1].x==p[L].x)R++;
for(int i=L;i<=R;i++){
if(i>L&&p[i].y==p[i-1].y)continue;
x=i==L?1:p[i-1].y+1;
y=i==R?U:p[i+1].y-1;
for(x=x+M-1,y=y+M+1,ans=0;x^y^1>0;x>>=1,y>>=1){
if(~x&1)ans=max(ans,T[x+1]);
if(y&1)ans=max(ans,T[y-1]);
}if(ans>T[p[i].y+M])return 0;
}for(int i=L;i<=R;i++){
T[p[i].y+M]=p[i].x;
for(int b=(p[i].y+M)/2;b;b/=2)T[b]=max(T[b<<1],T[(b<<1)^1]);
}
}return 1;
}
int main(){
for(M=1;M<U+2;M<<=1);
while(~scanf("%d",&n),n){
for(int i=0;i<n;i++)scanf("%d%d",&p[i].x,&p[i].y);
sort(p,p+n,cmp);
if(check())puts("YES");else puts("NO");
}return 0;
}
HDU 5820 Lights(扫描线+zkw线段树)的更多相关文章
- Atlantis HDU - 1542 (扫描线,线段树)
扫描线的模板题,先把信息接收,然后排序,记录下上边和下边,然后用一条虚拟的线从下往上扫.如果我扫到的是下边,那么久用线段树在这个区间内加上1,表示这个区间现在是有的,等我扫描到上边的时候在加上-1,把 ...
- 51nod 1206 && hdu 1828 Picture (扫描线+离散化+线段树 矩阵周长并)
1206 Picture 题目来源: IOI 1998 基准时间限制:2 秒 空间限制:131072 KB 分值: 160 难度:6级算法题 收藏 关注 给出平面上的N个矩形(矩形的边平行于X轴 ...
- HDU 4366 Successor(树链剖分+zkw线段树+扫描线)
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=4366 [题目大意] 有一个公司,每个员工都有一个上司,所有的人呈树状关系,现在给出每个人的忠诚值和 ...
- 线段树(单标记+离散化+扫描线+双标记)+zkw线段树+权值线段树+主席树及一些例题
“队列进出图上的方向 线段树区间修改求出总量 可持久留下的迹象 我们 俯身欣赏” ----<膜你抄> 线段树很早就会写了,但一直没有总结,所以偶尔重写又会懵逼,所以还是要总结一下. ...
- HDU 1166 - 敌兵布阵 - [单点修改、区间查询zkw线段树]
题还是那个题:http://www.cnblogs.com/dilthey/p/6827959.html 不过我们今天换一种线段树实现来做这道题: 关于zkw线段树的讲解:https://zhuanl ...
- zkw线段树详解
转载自:http://blog.csdn.net/qq_18455665/article/details/50989113 前言 首先说说出处: 清华大学 张昆玮(zkw) - ppt <统计的 ...
- ZKW线段树入门
Part 1 来说说它的构造 线段树的堆式储存 我们来转成二进制看看 小学生问题:找规律 规律是很显然的 一个节点的父节点是这个数左移1,这个位运算就是低位舍弃,所有数字左移一位 一个节点的子节点是这 ...
- 普及向 ZKW线段树!
啊,是否疲倦了现在的线段树 太弱,还递归! 那我们就欢乐的学习另外一种神奇的线段树吧!(雾 他叫做zkw线段树 这个数据结构灰常好写(虽然线段树本身也特别好写……) 速度快(貌似只在单点更新方面比 ...
- ZKW线段树
简介 zkw线段树虽然是线段树的另一种写法,但是本质上已经和普通的递归版线段树不一样了,是一种介于树状数组和线段树中间的存在,一些功能上的实现比树状数组多,而且比线段树好写且常数小. 普通线段树采用从 ...
随机推荐
- querySelectorAll的BUG
querySelector和querySelectorAll是W3C提供的新的查询接口 目前 IE8/9及Firefox/Chrome/Safari/Opera 的最新版已经支持它们. 但是Eleme ...
- Git存储用户名和密码(明文需谨慎)
当你配置好git后,在C:\Documents and Settings\Administrator\ 目录下有一个 .gitconfig 的文件,里面会有你先前配好的name 和email,只需在下 ...
- c++ containers
顺序容器 array(C++11) vector string deque forward_list(C++11) list 容器适配器 stack queue priority_queue 关联容器 ...
- OpenCV学习 6:平滑滤波器 cvSmooth()——2
原创文章,欢迎转载,转载请注明出处 前面进行了彩色的模糊处理,我们对黑白图片进行同样的平滑处理,看看效果.首先是需要创建黑白图片,我对opencv的各种函数还不是很熟悉,我们可以先用熟悉的创建单通道的 ...
- Top free and open source log management software
As mentioned in the previous post, in my quest to find an alternative to Kiwi Syslog, I looked at a ...
- 柯南君:看大数据时代下的IT架构(7)消息队列之RabbitMQ--案例(routing 起航)
二.Routing(路由) (using the Java client) 在前面的学习中,构建了一个简单的日志记录系统,能够广播所有的日志给多个接收者,在该部分学习中,将添加一个新的特点,就是可以只 ...
- openNebula dubug
lowest common denominator convenient way to manage virtual machines
- 应用程序正常初始化(0xc015002)失败解决方法
VS2005 sidebyside manifest error Microsoft.VC80.MFC Microsoft.VC80.CRT Microsoft.VC80.MFCLOC msvcr80 ...
- win8.1 安装webaccess遇到的写访问权限错误
大学的时候闲暇时间都用来玩游戏了,现在工作了,就把工作中遇到的问题和学习心得跟大家共享下,若有不对的地方欢迎指出,谢谢! 前几天突然想换用vs2013开发,就重装了win8.1系统,在新系统上安装we ...
- 虎扯:纯css3各方向小三角的制作原理分析
入驻博客园两个月之后的第一篇随笔,希望能够做到三个原则: One:不浪费自己的时间, Tow:不浪费读者的时间, 第三就是希望有缘的朋友们多多指教,共度前端快乐的大坑!!! 咱们今天来做一个居家旅行必 ...