对于区间段的离散化需要注意一下,和点离散化不同

离散后如何识别一段区间还是一段区间,而不是两个顶点,就是如果两个点的距离大于1,就往离散的数据里插入一个中间值,即用三个点来表示一段区间

/*
离散化长度
区间更新,线段树每个结点保存当前该区间颜色,查询也是如此
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 100005
int color[maxn<<];//-1表示无色
struct poster{
int l,r;
}p[maxn];
int data[maxn<<],cnt,m;
void pushdown(int rt){
if(color[rt]!=-){
color[rt<<]=color[rt<<|]=color[rt];
color[rt]=-;
}
}
void update(int L,int R,int c,int l,int r,int rt){
if(L<=l && R>=r){
color[rt]=c;
return;
}
pushdown(rt);
int m=l+r>>;
if(L<=m) update(L,R,c,lson);
if(R>m) update(L,R,c,rson);
} int vis[maxn],ans;
void query(int L,int R,int l,int r,int rt){
if(color[rt]!=- && !vis[color[rt]]){
ans++;
vis[color[rt]]=;
return;
}
if(l==r) return;
pushdown(rt);
int m=l+r>>;
if(L<=m) query(L,R,lson);
if(R>m) query(L,R,rson);
}
int main(){
int n,T;
scanf("%d",&T);
while(T--){
cin >> n;
cnt=ans=;
memset(vis,,sizeof vis);
memset(color,-,sizeof color);
for(int i=;i<=n;i++){
scanf("%d%d",&p[i].l,&p[i].r);
data[cnt++]=p[i].l;
data[cnt++]=p[i].r;
}
//离散化
sort(data,data+cnt);
m=unique(data,data+cnt)-data;
int tmp=m;
for(int i=;i<m;i++)
if(data[i]-data[i-]>) data[tmp++]=data[i-]+;
m=tmp;
sort(data,data+m); for(int i=;i<=n;i++){
int posl=lower_bound(data,data+m,p[i].l)-data+;
int posr=lower_bound(data,data+m,p[i].r)-data+;
update(posl,posr,i,,m,);
} query(,m,,m,);
cout << ans << endl;
}
}

poj2528贴海报,,的更多相关文章

  1. poj3468,poj2528

    其实这两题都是基础的线段树,但对于我这个线段树的初学者来说,总结一下还是很有用的: poj3468显然是线段树区间求和,区间更改的问题,而poj2528是对区间染色,问有多少种颜色的问题: 线段树的建 ...

  2. poj-2528线段树练习

    title: poj-2528线段树练习 date: 2018-10-13 13:45:09 tags: acm 刷题 categories: ACM-线段树 概述 这道题坑了我好久啊啊啊啊,,,, ...

  3. 线段树---poj2528 Mayor’s posters【成段替换|离散化】

    poj2528 Mayor's posters 题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报 思路:这题数据范围很大,直接搞超时+超内存,需要离散化: 离散化简单的来说就是只取我们需要 ...

  4. POJ-2528 Mayor's posters (离散化, 线段树)

    题目传送门: POJ-2528 题意就是在一个高度固定的墙面上贴高度相同宽度不同的海报,问贴到最后还能看到几张?本质上是线段树区间更新问题,但是要注意的是题中所给数据范围庞大,直接搞肯定会搞出问题,所 ...

  5. 用H5中的Canvas等技术制作海报

    在去年的时候也实现过合成海报的功能,不过当时时间仓促,实现的比较简单. 就一个旋转功能,图片也不能拖动放大,也不能裁剪. 去年的实现可以参考<移动图片操作--上传>和<移动图片操作- ...

  6. 关于用photoshop制作海报

    最近由于事情比较多,一直忙着各项活动的策划,而我所在的学社联和金山俱乐部都组织了ps的培训,也要求上交一些海报,在积极熟悉ps cs6中. 就昨天做的光棍节脱单海报来讲,稍微运用了笔刷等最基础的工具. ...

  7. ppt 制作海报 导出高分辨率图片

    用ppt做海报,导出图片的时候,发现导出的图片的分辨率只有96ppi,清晰度不太好. 怎么能这样呢! 网上搜了一下,发现微软提供了一个修改注册表的方法,点击这里访问.不过那里讲的最新只有2010,我的 ...

  8. BZOJ 1113: [Poi2008]海报PLA

    1113: [Poi2008]海报PLA Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1025  Solved: 679[Submit][Statu ...

  9. 【BZOJ-1113】海报PLA 单调栈

    1113: [Poi2008]海报PLA Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 896  Solved: 573[Submit][Status ...

随机推荐

  1. python3 获取Linux系统信息

    系统信息 import platform platform.uname() platform.architecture() CPU信息 /proc/cpuinfo文件包含了系统处理器单元的信息. #! ...

  2. 初探VBScript

    初探VBScript 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.VBScript简介 VBScript ,Visual Basic Script的简称,是微软公司出品的脚本 ...

  3. Redis 安全配置

    1.禁止一些高危命令 修改 redis.conf 文件,添加 rename-command FLUSHALL "" rename-command FLUSHDB "&qu ...

  4. javascript 模拟京东关闭广告栏

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. js定时器整理(执行一次、重复执行)

    在javascritp中,有两个关于定时器的专用函数,分别为: 1.倒计定时器:timename=setTimeout("function();",delaytime); 2.循环 ...

  6. ms sqlserver2008r2 自动备份

    日常工作中利用SQL SQLSERVER 2008 的维护计划对数据库进行定期的备份,这样一方面可以对数据库进行备份保证数据安全另一方面也可以减轻对维护人员的负担. 一般对于WEB 服务器进 行维护都 ...

  7. javascript 回到顶部

    <script type="text/javascript"> window.onload = function(){ var timer = null; //用于判断 ...

  8. CSS之清除浮动(span/clearfix)

    一.问题描述 web网页设计中,在div元素中有时候常伴有图文结合的post组件.为了使得文本在图像周围环绕,那么需要对图像区域使用float浮动.如果不做清除浮动,则会出现如下结果: 图像比文本高, ...

  9. 深入剖析ThreadLocal实现原理以及内存泄漏问题

    关于ThreadLocalMap<ThreadLocal, Object>弱引用问题: 当线程没有结束,但是ThreadLocal已经被回收,则可能导致线程中存在ThreadLocalMa ...

  10. adb shell dumpsys meminfo [packagename] 输出内容的含义

    Private Dirty:私有的脏内存页(还在使用中)的大小:   Private Clean:私有的干净内存页(现在未使用了)的大小: 以上这二者相加,便是应用曾经申请过的内存空间大小.Priva ...