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一次总区间,所以可以直 ...
随机推荐
- 重构第31天 使用多态替代条件语句( Replace conditional with Polymorphism)
理解:本文中的”使用多态代替条件判断”是指如果你需要检查对象的类型或者根据类型执行一些操作时,一种很好的办法就是将算法封装到类中,并利用多态性进行抽象调用. 详解:本文展示了面向对象编程的基础之一“多 ...
- ASP.NET MVC的路由
好久没写博文了,感觉最近好像少了点动力.唉!这回就看看这个MVC的路由. 说这个路由机制其实不是MVC里面特有的,ASP.NET里面本身就有的,只不过在WebForm里面一般比较少用,而在MVC里就是 ...
- MAC OS X 系统怎么样?
朝鲜的 IT 应用状况并不为外界所熟知,过去媒体纷纷报道,朝鲜已故领导人金正日酷爱苹果电子产品,而最近一份调查报告显示,在朝鲜个人电脑操作系统市场,苹果 MAC OS X 系统位居第一名,遥遥领先微软 ...
- 【Unity】13.1 场景视图中的GI可视化
分类:Unity.C#.VS2015 创建日期:2016-05-19 一.简介 在场景视图中设计不同的场景内容时,可以根据需要勾选相关的渲染选项,以便让场景仅显示其中的一部分或者全部渲染效果. 在这些 ...
- LINQ TO XML 个人的一些心得1
最近没事做,刚来到一个新公司.写了一些处理xml的项目 就是把一些xml的数据处理后存储到数据库中.原本还是准备用原来的xml来写的.在群里有个人说,用linq to xml 好了,比较快捷.就看了 ...
- 最全面的jdbcUtils,总有一种适合你
附加jar包,TxQueryRunner.java文件,dbconfig.properties配置文件(点击链接下载): http://files.cnblogs.com/files/xiaoming ...
- 推荐轻量友好的.NET测试断言工具Shouldly
Shouldly是一个轻量的断言(Assertion)框架,用于补充.NET框架下的测试工具.Shouldly将焦点放在当断言失败时如何简单精准的给出很好的错误信息. Shouldly在GitHub的 ...
- [zz] JIT&HotSpot
zz from 百度百科 最早的Java建置方案是由一套转译程式(interpreter),将每个Java指令都转译成对等的微处理器指令,并根据转译后的指令先后次序依序执行,由于一个Java指令可能被 ...
- 一道灵活的css笔试题
今天在网上看到一css笔试题,乍一看很简单,实则内部暗藏玄机,题目大概是:九宫格,每格长宽50px,边框宽度5px,鼠标经过边框变红,效果如下: 鼠标路过时: 以下是代码(如有不足之处望多加指正) & ...
- 硬盘变成RAW的修复过程
可能在不知道为什么的情况下,移动硬盘或者本地磁盘的每个分区变成了RAW格式.其在Win系统下的无损修复过程如下: 用“win”+“R”打开“运行”小窗口: 键入“CMD”: 键入命令“CHKDSK P ...