题目链接:https://vjudge.net/problem/POJ-2528

题意:在区间[1,1e7]内染色,依次染n(<=1e4)中颜色,给出每种颜色染色的范围,可重叠,求最终有多少种颜色。

思路:继续肝线段树。。被这题虐了一下午加一晚上QAQ。

   首先要想到离散化,因为区间为1e7,直接做的话时间空间都做不到。但因为是区间,这里不能简单的离散化,比如1、5离散化为1、2是有问题的,必须离散化为1,3,5; 还记得要先去重。

   其次是线段树,这道题是典型的线段树的题,直接对点操作的话复杂度很大,所以用线段树完成对区间的操作。线段树结点包括l(区间左端点)、r(区间右端点)、value(为0表示该区间没有颜色或有多种颜色,为>0表示对应的颜色编号)。

   最后进行一次询问即可,仅当区间的value>0时再判断颜色,并且用hash数组记录颜色i是否出现过。

AC代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=; struct node{
int l,r,value;
}tr[*maxn]; int a[maxn][],b[*maxn],T,n,hash[maxn],ans; void build(int v,int l, int r){
tr[v].l=l,tr[v].r=r,tr[v].value=;
if(l==r) return;
int mid=(l+r)>>;
build(v<<,l,mid);
build(v<<|,mid+,r);
} void pushdown(int v){
tr[v<<].value=tr[v].value;
tr[v<<|].value=tr[v].value;
tr[v].value=;
} void update(int v,int l,int r,int k){
if(l<=tr[v].l&&r>=tr[v].r){
tr[v].value=k;
return;
}
if(tr[v].value) pushdown(v);
int mid=(tr[v].l+tr[v].r)>>;
if(l<=mid) update(v<<,l,r,k);
if(r>mid) update(v<<|,l,r,k);
} void query(int v){
if(tr[v].value){
if(!hash[tr[v].value]){
++ans;
hash[tr[v].value]=;
}
return;
}
if(tr[v].l==tr[v].r) return;
query(v<<);
query(v<<|);
} int main(){
scanf("%d",&T);
while(T--){
memset(hash,,sizeof(hash));
ans=;
scanf("%d",&n);
int cnt1=;
for(int i=;i<=n;++i){
scanf("%d%d",&a[i][],&a[i][]);
b[++cnt1]=a[i][];
b[++cnt1]=a[i][];
}
sort(b+,b+cnt1+);
int cnt2=;
for(int i=;i<=cnt1;++i)
if(b[i]!=b[i-]) b[++cnt2]=b[i];
int t=cnt2;
for(int i=;i<=t;++i)
if(b[i]-b[i-]>) b[++cnt2]=b[i-]+;
sort(b+,b+cnt2+);
build(,,cnt2);
for(int i=;i<=n;++i){
int x=lower_bound(b+,b+cnt2+,a[i][])-b;
int y=lower_bound(b+,b+cnt2+,a[i][])-b;
update(,x,y,i);
}
query();
printf("%d\n",ans);
}
return ;
}

最新文章

  1. pvoid64 pvoid
  2. 微信公众号内H5调用微信支付国内服务商模式
  3. ClassLoader.getSystemResourceAsStream()
  4. main方法的理解
  5. sikuli运行出现问题:Win32Util.dll: Can&#39;t load 32-bit .dll on a AMD 64 bit platform
  6. GameMap地图初始化
  7. ValueError: Attempted relative import in non-package
  8. 可恶的0x1A
  9. centos安装nodejs和mongodb
  10. .net Mvc Controller 接收 Json/post方式 数组 字典 类型 复杂对象
  11. Unity截图
  12. web编程速度大比拼(nodejs go python)(非专业对比)
  13. Cocos2d-x 3.1.1 lua-tests 开篇
  14. HDU - 1045 Fire Net(二分匹配)
  15. Mysql(一):初识数据库
  16. Python_day8
  17. JavaScript基础整理
  18. python 退出程序的方式
  19. loj#6076「2017 山东一轮集训 Day6」三元组 莫比乌斯反演 + 三元环计数
  20. 浏览器Request Header和Response Header的内容

热门文章

  1. Springboot+ActiveMQ(ActiveMQ消息持久化,保证JMS的可靠性,消费者幂等性)
  2. [转][ActiveMQ]Apache.NMS.ActiveMQ 用法
  3. (转)通过注册表修改VC6.0的字体
  4. Windows系统配置
  5. 编译ijkplayer后直播无声音
  6. Spring Security开发Restful服务
  7. Quick Search Articles in My Blog
  8. Spring MVC 注解之controller层
  9. ajax请求中包含中文参数
  10. 一条SQL语句执行得很慢的原因有哪些?