poj 2528 poster经典线段树+lazy+离散化
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int a[maxn];int b[maxn];int x[maxn*];int flag[maxn];
int cor[maxn<<];
int cnt=;
int trans(int num,int l,int r)
{
// int m=(l+r)>>1;
// if(num==x[m]) return m;
// if(num>x[m]) return trans(num,m+1,r);
// if(num<trans) return trans(num,l,m);
while(l<=r)
{
int m=(l+r)>>;
if(x[m]==num) return m;
if(num>x[m]) l=m+;
else r=m;
}
return -;
}
void pushdown(int rt)
{
if(cor[rt]!=-)
{
cor[rt<<]=cor[rt];
cor[rt<<|]=cor[rt];
cor[rt]=-;
}
}
void update(int a,int b,int i,int l,int r,int rt)
{
if(a<=l&&b>=r)
{
cor[rt]=i;
return;
}
pushdown(rt);
int m=(r+l)>>;
if(a<=m) update(a,b,i,lson);
if(b>m) update(a,b,i,rson);
}
void query(int l,int r,int rt)
{
if(cor[rt]!=-)
{
if(!flag[cor[rt]])
{
cnt++;
flag[cor[rt]]=;
}
return;
}
if(l==r) return;
int m=(r+l)>>;
query(lson);
query(rson);
}
int main()
{
int cases,n;
scanf("%d",&cases);
while(cases--)
{
scanf("%d",&n);
memset(cor,-,sizeof(cor));
int pointer=;
for(int i=;i<n;i++)
{
scanf("%d%d",&a[i],&b[i]);
x[pointer++]=a[i];
x[pointer++]=b[i];
}
sort(x+,x+pointer);
int pointer2=;
for(int i=;i<pointer;i++)
{
if(x[i]!=x[i-]) x[pointer2++]=x[i];
}
for(int i=pointer2-;i>=;i--)
{
if(x[i]!=x[i-]+) x[pointer2++]=x[i-]+;
}
sort(x,x+pointer2);
for(int i=;i<n;i++)
{
int l=trans(a[i],,pointer2-);
int r=trans(b[i],,pointer2-);
update(l,r,i,,pointer2-,);
}
cnt=;
memset(flag,,sizeof(flag));
query(,pointer2-,);
printf("%d\n",cnt);
}
return ;
}
poj 2528 poster经典线段树+lazy+离散化的更多相关文章
- POJ 2777——线段树Lazy的重要性
POJ 2777 Count Color --线段树Lazy的重要性 原题 链接:http://poj.org/problem?id=2777 Count Color Time Limit: 1000 ...
- ACM/ICPC 之 数据结构-线段树+区间离散化(POJ2528)
这道题用线段树做更方便更新和查询,但是其数据范围很大,因此要将离散化和线段树结合起来,算是一道比较经典的线段树+离散化的例题. 线段树的离散化有很多方法,在这里,我先用一次结点离散化,间接将源左右端点 ...
- JuQueen(线段树 lazy)
JuQueen Time Limit: 5 Sec Memory Limit: 512 MB Description Input Output Sample Input 10 10 5 state ...
- ZOJ - 1610 经典线段树染色问题
这个是一个经典线段树染色问题,不过题目给的是左右左右坐标,即[0,3]包含0-1这一段 1-2这一段 2-3这一段,和传统的染色不太一样,不过其实也不用太着急. 我们把左边的坐标+1,即可,那么[0, ...
- hdu1542 Atlantis (线段树+扫描线+离散化)
Atlantis Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total S ...
- 分块+lazy 或者 线段树+lazy Codeforces Round #254 (Div. 2) E
E. DZY Loves Colors time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- POJ 2528 Mayor's posters 【区间离散化+线段树区间更新&&查询变形】
任意门:http://poj.org/problem?id=2528 Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total S ...
- poj 2528 (线段树+特殊离散化)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 51098 Accepted: 14788 ...
- Mayor's posters POJ - 2528 线段树(离散化处理大数?)
题意:输入t组数据,输入n代表有n块广告牌,按照顺序贴上去,输入左边和右边到达的地方,问贴完以后还有多少块广告牌可以看到(因为有的被完全覆盖了). 思路:很明显就是线段树更改区间,不过这个区间的跨度有 ...
随机推荐
- kevin的黎明十分
今天在搜索struts2的相关知识的时候,博客园让我提起了兴趣.其间看到了hongton同学的分享,感觉受益颇深!所以今天我加入了博客园,希望自己以后能在这个大家园中分享知识,收获人生! 即兴之下, ...
- (转)Linux修改SSH登录欢迎语
场景:感觉这样做挺个性的,做个记录! 1 Linux修改SSH的欢迎语 众所周知,Linux系统并没有像Windows一样自带远程桌面连接,虽然可以通过后期安装VNC之类的软件来弥补这个缺点,但用了L ...
- 【mysql】常用操作
2.mysql service mysql status mysql --version mysql -h 服务器主机地址 -u 用户名 -p 用户密码 exit 退出 mysql -h 主机名 - ...
- 【MYSQL】解决Mysql直接登录问题(删除匿名用户)(转)
刚安装的Mysql会存在匿名用户. 在命令行下输入mysql,(如果这时提示不是外部或内部指令,那就把mysql server文件下的bin目录添加到系统路径Path中) 如果没有任何提示,直接进入& ...
- Asp.net MVC Razor常见问题及解决方法
没有经验的童鞋就是这样磕磕碰碰出来的经验. 1,Datatype的错误提示消息无法自定义 这也许是Asp.net MVC的一个Bug.ViewModel中定义了DataType为Date字段: [Re ...
- Redis架构设计--客户端请求RedisServer时,server端持久化的部分操作
- git远程仓库之从远程库克隆
上次我们讲了先有本地库,后有远程库的时候,如何关联远程库. 现在,假设我们从零开发,那么最好的方式是先创建远程库,然后,从远程库克隆. 首先,登陆GitHub,创建一个新的仓库,名字叫gitskill ...
- OpenCV探索之路(二十二):制作一个类“全能扫描王”的简易扫描软件
相信很多人手机里都装了个"扫描全能王"APP,平时可以用它来可以扫描一些证件.文本,确实很好用,第一次用的时候确实感觉功能很强大啊算法很牛逼啊.但是仔细一想,其实这些实现起来也是很 ...
- 【待整理】MySQL alter table modify vs alter table add产生state不一样
MySQL:5.6.35 OS:redhat5.8 今天更新数据库某些表字段,有如下两SQL: ①alter table xx modify xxxx;(表大概是77w) ②alter table s ...
- "=="和equals方法究竟有什么区别?
(单独把一个东西说清楚,然后再说清楚另一个,这样,它们的区别自然就出来了,混在一起说,则很难说清楚) ==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同, ...