Description

The citizens of Bytetown, AB, could not stand that the candidates in the mayoral election campaign have been placing their electoral posters at all places at their whim. The city council has finally decided to build an electoral wall for placing the posters and introduce the following rules:

  • Every candidate can place exactly one poster on the wall.
  • All posters are of the same height equal to the height of the wall; the width of a poster can be any integer number of bytes (byte is the unit of length in Bytetown).
  • The wall is divided into segments and the width of each segment is one byte.
  • Each poster must completely cover a contiguous number of wall segments.

They have built a wall 10000000 bytes long (such that there is enough place for
all candidates). When the electoral campaign was restarted, the candidates were
placing their posters on the wall and their posters differed widely in width.
Moreover, the candidates started placing their posters on wall segments already
occupied by other posters. Everyone in Bytetown was curious whose posters will
be visible (entirely or in part) on the last day before elections.
Your task is to find the number of visible posters when all the posters are
placed given the information about posters' size, their place and order of
placement on the electoral wall.

Input

The first line of input contains a number c giving the
number of cases that follow. The first line of data for a single case contains
number 1 <= n <= 10000. The subsequent n lines describe the posters in the
order in which they were placed. The i-th line among the n lines contains two
integer numbers l i and ri which are the number of the wall segment
occupied by the left end and the right end of the i-th poster, respectively. We
know that for each 1 <= i <= n, 1 <= l i <= ri <=
10000000. After the i-th poster is placed, it entirely covers all wall segments
numbered l i, l i+1 ,... , ri.

Output

For each input data set print the number of visible
posters after all the posters are placed.

The picture below illustrates the case of the sample input.

Sample Input

1

5

1 4

2 6

8 10

3 4

7 10

Sample Output

4

题意就是一块公告牌,长度为n。大家向上面依次贴广告,广告的范围是[L,R],问你最后你在公告牌上能看见几个广告。
这个题分为3个阶段解!
显然是线段树啊!对!这是第一阶段!但如果硬写这个数据量不是TLE就是MLE。所以必须加上离散化处理。离散化处理就是这个题的第二阶段!
什么是离散化呢?就是建树时没有必要每个区间长度为1的区间都要占一个节点,这样无论在空间还是在以后的操作上面都是吃亏的。我们只需要存所有出现的区间的端点就可以了。
比如这个例子
3
1 10
1 4
6 10

我们把出现的端点排序然后去重以后得到的1,4,6,10。
1    4   
6    10

↓    ↓     ↓     ↓
1    2   
3     4
经过这样的一映射,我们就只处理一个长度为4的线段树就行了

结果显然是不对的,这个测试用例的结果是3,而如果向上面(普通离散化)这样分析的话结果就是2了,不信看下图。

aaarticlea/png;base64,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" alt="" />

是不是少了[4,5]这个区间?现在就要来到这个题的第三点!!!我们在普通离散化后,如果两个相邻的区间端点之差大于1,我们就再这两个端点间加一个端点。

像上面的用例就应该变成

1    4    6    10  我们都加上了一个右端点-1的三个点,在建树的时候考虑7个点

↓   ↓  ↓   ↓  ↓  ↓   ↓

1  2  3  4  5  6  7

这样建树就是对的!!!!!

代码如下:

 #include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define M 10010
bool hash[M];
int col[M<<];//用来保存颜色(海报)
struct segTree
{
int l,r;
}tree[M];
int ans,x[M<<],n,t;
void PushDown (int now)//如果当前节点有海报,向下更新
{
if (col[now]!=-)
{
col[now<<]=col[now<<|]=col[now];
col[now]=-;
}
}
void Update (int L,int R,int c,int l,int r,int now)
{
if (L<=l&&r<=R)//如果正好找到区间,修改区间
{
col[now]=c;
return ;
}
PushDown(now);//延迟后的更新(这时候该用子节点了,要向下更新)
int m=(l+r)>>;
if (L<=m)
Update(L,R,c,l,m,now<<);
if (R>m)
Update(L,R,c,m+,r,now<<|);
}
void query (int l,int r,int now)
{
if (col[now]!=-)
{
if (!hash[col[now]])
ans++;
hash[col[now]]=true;
return ;
}
if (l==r)//更新到底一定要return,要不会炸
return ;
int m=(l+r)>>;
query(l,m,now<<);
query(m+,r,now<<|);
}
int main()
{
//freopen("de.txt","r",stdin);
scanf("%d",&t);
while (t--)
{
int cnt=;
scanf("%d",&n);
for (int i=;i<n;++i)
{
scanf("%d%d",&tree[i].l,&tree[i].r);
x[cnt++]=tree[i].l,x[cnt++]=tree[i].r;
}
sort(x,x+cnt);
int m=;
for (int i=;i<cnt;++i)
if (x[i]!=x[i-]) x[m++]=x[i];//记录不重复的节点
for (int i=m-;i>=;--i)
if (x[i]!=x[i-]+) x[m++]=x[i-]+;//把相差大于1的两个节点之间再加上一个节点(右节点-1)
sort(x,x+m);
memset(col,-,sizeof col);
for (int i=;i<n;++i)
{
int l=lower_bound(x,x+m,tree[i].l)-x;
int r=lower_bound(x,x+m,tree[i].r)-x;
Update(l,r,i,,m,);
}
memset(hash,false,sizeof hash);
ans=;
query(,m,);
printf("%d\n",ans);
}
return ;
}

这个题去重的时候办法可能老土,但是别用set!!!不信看时间!不用set  79ms 用了set 375ms

aaarticlea/png;base64,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" alt="" />

POJ 2528(线段树+离散化+特殊离散化)网上博客很少有人真正写对!!! 是POJ数据太水...的更多相关文章

  1. poj 2528 线段树区间修改+离散化

    Mayor's posters POJ 2528 传送门 线段树区间修改加离散化 #include <cstdio> #include <iostream> #include ...

  2. poj 2528(线段树+离散化) 市长的海报

    http://poj.org/problem?id=2528 题目大意是市长竞选要贴海报,给出墙的长度和依次张贴的海报的长度区间(参考题目给的图),问最后你能看见的海报有几张 就是有的先贴的海报可能会 ...

  3. poj 2528 线段树+离散化

    题意:在墙上贴一堆海报(只看横坐标,可以抽象成一线段),新海报可以覆盖旧海报.求最后能看到多少张海报 sol:线段树成段更新.铺第i张海报的时候更新sg[i].x~sg[i].y这一段为i. 然而坐标 ...

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

    离散化其实就是把所有端点放在一起,然后排序去个重就好了. 比如说去重以后的端点个数为m,那这m个点就构成m-1个小区间.然后给这m-1个小区间编号1~m-1,再用线段树来做就行了. 具体思路是,从最后 ...

  5. poj 2528 线段树 离散化的小技巧

    题意:在墙上贴海报,海报可以互相覆盖,问最后可以看见几张海报思路:直接搞超时+超内存,需要离散化.离散化简单的来说就是只取我们需要的值来 用,比如说区间[1000,2000],[1990,2012] ...

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

    Mayor's posters Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 74745   Accepted: 21574 ...

  7. Mayor's posters POJ - 2528 线段树(离散化处理大数?)

    题意:输入t组数据,输入n代表有n块广告牌,按照顺序贴上去,输入左边和右边到达的地方,问贴完以后还有多少块广告牌可以看到(因为有的被完全覆盖了). 思路:很明显就是线段树更改区间,不过这个区间的跨度有 ...

  8. Mayor's posters POJ - 2528 线段树区间覆盖

    //线段树区间覆盖 #include<cstdio> #include<cstring> #include<iostream> #include<algori ...

  9. POJ 2528 线段树

    坑: 这道题的坐标轴跟普通的坐标轴是不一样的-- 此题的坐标轴 标号是在中间的-- 线段树建树的时候就不用[l,mid][mid,r]了(这样是错的) 直接[l,mid][mid+1,r]就OK了 D ...

随机推荐

  1. 使用CSS在页面中嵌入字体

    http://jingyan.baidu.com/article/3065b3b6e9b2d9becff8a4c1.html 首先感谢css9.net照抄原话: 字体使用是网页设计中不可或缺的一部分. ...

  2. java 通过反射获取类属性结构,类方法,类父类及其泛型,类,接口和包

    首先自定义三个类 package reflection1; public interface MtInterface { void info(); } package reflection1; imp ...

  3. SaltStack(自动化运维工具)

    SaltStack管理工具允许管理员对多个操作系统创建一个一致的管理系统,包括VMware vSphere环境.SaltStack作用于仆从和主拓扑.SaltStack与特定的命令结合使用可以在一个或 ...

  4. Key Set

    http://acm.hdu.edu.cn/contests/contest_showproblem.php?pid=1011&cid=594 Key Set Time Limit: 2000 ...

  5. 【c#技术】一篇文章搞掂:Newtonsoft.Json Json.Net

    一.介绍 Json.Net是一个.Net高性能框架. 特点和好处: 1.为.Net对象和JSON之间的转换提供灵活的Json序列化器: 2.为阅读和书写JSON提供LINQ to JSON: 3.高性 ...

  6. python3_OS模块

    一.什么是os模块 os模块提供了多数操作系统的功能接口函数.当os模块被导入后,它会自适应于不同的操作系统平台,根据不同的平台进行相应的操作,在python编程时,经常和文件.目录打交道,所以离不了 ...

  7. linux缺頁異常處理--內核空間[v3.10]

    缺頁異常被觸發通常有兩種情況—— 1.程序設計的不當導致訪問了非法的地址 2.訪問的地址是合法的,但是該地址還未分配物理頁框 下面解釋一下第二種情況,這是虛擬內存管理的一個特性.盡管每個進程獨立擁有3 ...

  8. Https 代理 sslsocket

    1. 什么是SSLSocket JDK文档指出,SSLSocket扩展Socket并提供使用SSL或TLS协议的安全套接字. 这种套接字是正常的流套接字,但是它们在基础网络传输协议(如TCP)上添加了 ...

  9. Mybatis一级缓存和二级缓存 Redis缓存

    一级缓存 Mybatis的一级缓存存放在SqlSession的生命周期,在同一个SqlSession中查询时,Mybatis会把执行的方法和参数通过算法生成缓存的键值,将键值和查询结果存入一个Map对 ...

  10. 设计模式--简单工厂(Simple Factory)

    工厂模式是最常用的一种创建型模式,通常所说的工厂模式一般是指工厂方法模式.本篇是是工厂方法模式的“小弟”,我们可以将其理解为工厂方法模式的预备知识,它不属于GoF 23种设计模式,但在软件开发中却也应 ...