poj2528 Mayor's posters(线段树之成段更新)
Mayor's posters
Time Limit: 1000MS
Memory Limit: 65536K
Total Submissions: 37346
Accepted: 10864
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 li 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 <= li <= ri <= 10000000. After the i-th poster is placed, it entirely covers all wall segments numbered li, li+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
有感:
今天感觉收获挺多,再看一位大神写的博客(写的很好),学习线段数,顺带题解了什么叫离散化,做为初学着,我表示我完全是照着大神的代码敲的
。。本题数据很大,直接做的话会超时超内存,需离散化
代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1 const int maxn=11111;
bool hash[maxn];
int li[maxn],ri[maxn];
int X[maxn*3];
int col[maxn<<2];
int cnt; void PushDown(int rt)
{
if(col[rt]!=-1)
{
col[rt<<1]=col[rt<<1|1]=col[rt];
col[rt]=-1;
}
} void update(int L,int R,int c,int l,int r,int rt)
{
if(L<=l&&R>=r)
{
col[rt]=c;
return ;
}
PushDown(rt);
int m=(l+r)>>1;
if(L<=m) update(L,R,c,lson);
if(m<R) update(L,R,c,rson);
} void query(int l,int r,int rt)
{
if(col[rt]!=-1)
{
if(!hash[col[rt]]) cnt++;
hash[col[rt]]=true;
return ;
}
if(l==r) return ;
int m=(l+r)>>1;
query(lson);
query(rson);
} int Bin(int key,int n,int X[])
{
int l=0,r=n-1;
while(l<=r)
{
int m=(l+r)>>1;
if(X[m]==key) return m;
if(X[m]<key) l=m+1;
else r=m-1;
}
return -1;
} int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
int nn=0;
for(int i=0;i<n;i++)
{
scanf("%d%d",&li[i],&ri[i]);
X[nn++]=li[i];
X[nn++]=ri[i];
}
sort(X,X+nn);
int m=1;
for(int i=1;i<nn;i++)
if(X[i]!=X[i-1]) X[m++]=X[i]; for(int i=m-1;i>0;i--)
{
if(X[i]!=X[i-1]+1)
X[m++]=X[i-1]+1;
}
sort(X,X+m);
memset(col,-1,sizeof(col));
for(int i=0;i<n;i++)
{
int l=Bin(li[i],m,X);
int r=Bin(ri[i],m,X);
update(l,r,i,0,m-1,1);
}
cnt=0;
memset(hash,false,sizeof(hash));
query(0,m-1,1);
printf("%d\n",cnt);
}
}
poj2528 Mayor's posters(线段树之成段更新)的更多相关文章
- Codeforces295A - Greg and Array(线段树的成段更新)
		
题目大意 给定一个序列a[1],a[2]--a[n] 接下来给出m种操作,每种操作是以下形式的: l r d 表示把区间[l,r]内的每一个数都加上一个值d 之后有k个操作,每个操作是以下形式的: x ...
 - hdu 1698 Just a Hook(线段树之 成段更新)
		
Just a Hook Time Limit: ...
 - poj-----(2528)Mayor's posters(线段树区间更新及区间统计+离散化)
		
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 43507 Accepted: 12693 ...
 - POJ2528 Mayor's posters —— 线段树染色 + 离散化
		
题目链接:https://vjudge.net/problem/POJ-2528 The citizens of Bytetown, AB, could not stand that the cand ...
 - [poj2528] Mayor's posters (线段树+离散化)
		
线段树 + 离散化 Description The citizens of Bytetown, AB, could not stand that the candidates in the mayor ...
 - POJ2528:Mayor's posters(线段树区间更新+离散化)
		
Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral electio ...
 - poj2528 Mayor's posters(线段树区间修改+特殊离散化)
		
Description The citizens of Bytetown, AB, could not stand that the candidates in the mayoral electio ...
 - poj2528 Mayor's posters(线段树区间覆盖)
		
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 50888 Accepted: 14737 ...
 - 线段树之成段更新( 需要用到延迟标记,简单来说就是每次更新的时候不要更新到底,用延迟标记使得更新延迟到下次需要更新or询问到的时候)
		
HDU 1698 链接: http://acm.hdu.edu.cn/showproblem.php?pid=1698 线段树功能:update:成段替换 (由于只query一次总区间,所以可以直 ...
 
随机推荐
- sencha combobox下拉框不用jsonstore,直接使用字符串数组做数据源
			
combobox下拉框的store除了可以选择一个jsonstore来加载数据,还可以直接使用符串Array做数据源. { xtype: 'combobox', fieldLabel: 'Label' ...
 - js定时器调用参数的方法
			
var userName="Tony"; //根据用户名显示欢迎信息 function ss(_name){ alert("ss,"+_name); } 使用字 ...
 - 不经意间网易开源镜像去掉了FreeBSD的镜像
			
http://mirrors.163.com/ FreeBSD已经到了这么不招人待见的地步了么? 网易曾经可是FreeBSD的大户啊.
 - Little Jumper---(三分)
			
Description Little frog Georgie likes to jump. Recently he have discovered the new playground that s ...
 - zend framework2学习(一)初步入门
			
声明:本人菜鸟一枚,由于项目中需要用到zf2框架进行开发,在此记载学习使用过程中的点点滴滴.才疏学浅,请多指教............. ------------------------------- ...
 - [Windows Phone] APP上架,遇到错误2001的解决方案。(Error:2001)
			
[Windows Phone] APP上架,遇到错误2001的解决方案.(Error:2001) 问题情景 最近在开始玩Windows Phone的开发,开发的过程中虽然有点小挫折,但是参考网络许多前 ...
 - C: const and static keywords
			
原文:http://www.noxeos.com/2011/07/29/c-const-static-keywords/ C: const and static keywords Ok, once a ...
 - Office2016体验
			
Microsoft又迎来了更新的季节.对于我来说,win10就算了,不太稳定,特别是遇到一些专业的程序,因为很多行业软件开发.测试环境都是winxp或win7等:VS2015也安上了,但还没用,一直用 ...
 - AutoCAD .NET二次开发(三)
			
在ArcGIS中,锁是一个经常遇到的东西,在打开一个该当时要锁定,编辑一个文档是再次锁定.要深入理解这个,要学习一下进程与线程.在CAD.NET中,也有Lock与Unlock. 获取一个文档,在进行处 ...
 - SharePoint 2013 术语和术语集介绍
			
托管元数据是一个集中管理的术语的分层集合,我们可以定义术语和术语集,然后将其用作 SharePoint Server 2013 中项目的属性.简单的说,术语是一个可与 SharePoint Serve ...