poj 2528
| Time Limit: 1000MS | Memory Limit: 65536K | |
| Total Submissions: 56958 | Accepted: 16464 |
Description
- 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
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
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
Source
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
using namespace std;
struct li{int x,y;}a[10001];
int n,ans,col[44001],tot[10001],s1[22001],s2[33001],n1,n2;
int bin(int k)
{
int l=1,r=n2;
while(l<=r){
int m=(l+r)>>1;
if(s2[m]==k) return m;
if(s2[m]<k) l=m+1;
else r=m-1;
}
return -1;
}
void pushdown(int k)
{
if(col[k]!=-1){
col[k<<1]=col[k<<1|1]=col[k];
col[k]=-1;
}
}
void update(int s,int t,int k,int wantl,int wantr,int p)
{
if(wantl<=s&&t<=wantr){
col[k]=p;
return ;
}pushdown(k);
int m=(s+t)>>1;
if(wantl<=m)update(s,m,k<<1,wantl,wantr,p);
if(wantr>m)update(m+1,t,k<<1|1,wantl,wantr,p);
}
void query(int s,int t,int k)
{
if(col[k]!=-1){
if(!tot[col[k]])ans++;
tot[col[k]]=1;
return ;
}
if(!(s^t))return ;
int m=(s+t)>>1;
query(s,m,k<<1);
query(m+1,t,k<<1|1);
}
int main()
{
int t;
scanf("%d",&t);
for(;t;t--){
scanf("%d",&n);
n1=0;
for(int i=1;i<=n;i++){
scanf("%d%d",&a[i].x,&a[i].y);
s1[++n1]=a[i].x;
s1[++n1]=a[i].y;
}
sort(s1+1,s1+1+n1);
n2=0;
for(int i=1;i<=n1;i++)
if(s1[i-1]^s1[i])s2[++n2]=s1[i];
//for(int i=n2;i>=1;i--)
// if(s2[i]^(s2[i-1]+1))s2[++n2]=s2[i-1]+1;
//sort(s2+1,s2+1+n2);
memset(col,-1,sizeof(col));
for(int i=1;i<=n;i++){
a[i].x=bin(a[i].x);
a[i].y=bin(a[i].y);
update(1,n2,1,a[i].x,a[i].y,i);
}ans=0;
memset(tot,0,sizeof(tot));
query(1,n2,1);
printf("%d\n",ans);
}
return 0;
}
poj 2528的更多相关文章
- POJ 2528 Mayor's posters
Mayor's posters Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- poj 2528 Mayor's posters(线段树+离散化)
/* poj 2528 Mayor's posters 线段树 + 离散化 离散化的理解: 给你一系列的正整数, 例如 1, 4 , 100, 1000000000, 如果利用线段树求解的话,很明显 ...
- POJ 2528 Mayor's posters(线段树区间染色+离散化或倒序更新)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 59239 Accepted: 17157 ...
- poj 2528 Mayor's posters 线段树+离散化技巧
poj 2528 Mayor's posters 题目链接: http://poj.org/problem?id=2528 思路: 线段树+离散化技巧(这里的离散化需要注意一下啊,题目数据弱看不出来) ...
- poj 2528 (线段树+离散化)
poj 2528 For each input data set print the number of visible posters after all the posters are place ...
- POJ - 2528 Mayor's posters(dfs+分治)
POJ - 2528 Mayor's posters 思路:分治思想. 代码: #include<iostream> #include<cstdio> #include< ...
- POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化)
POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化) 题意分析 贴海报,新的海报能覆盖在旧的海报上面,最后贴完了,求问能看见几张海报. 最多有10000张海报,海报 ...
- POJ 2528——Mayor's posters——————【线段树区间替换、找存在的不同区间】
Mayor's posters Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- poj 2528 线段树区间修改+离散化
Mayor's posters POJ 2528 传送门 线段树区间修改加离散化 #include <cstdio> #include <iostream> #include ...
- POJ 2528 Mayor's posters (线段树)
题目链接:http://poj.org/problem?id=2528 题目大意:有一个很上的面板, 往上面贴海报, 问最后最多有多少个海报没有被完全覆盖 解题思路:将贴海报倒着想, 对于每一张海报只 ...
随机推荐
- GDAL关于读写图像的简明总结
读写影像可以说是图像处理最基础的一步.关于使用GDAL读写影像,平时也在网上查了很多资料,就想结合自己的使用心得,做做简单的总结. 在这里写一个例子:裁剪lena图像的某部分内容,将其放入到新创建的. ...
- 之二:CAKeyframeAnimation - 关键帧动画
是CApropertyAnimation的子类,跟CABasicAnimation的区别是:CABasicAnimation只能从一个数值(fromValue)变到另一个数值(toValue),而CA ...
- Android studio 如何查看模拟器里面的文件
1.查看SD卡里面的内容 2.看数据库
- Android jni helloworld
新建Android项目,设置布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android& ...
- 【代码笔记】iOS-背景色随机显示
一,效果图. 二,工程图. 三,代码. RootViewController.h RootViewController.m - (void)viewDidLoad { [super viewDidLo ...
- tomcat常见错误及解决方案
一,tomcat启动时错误 1:The JAVA_HOME environment variable is not defined This environment variable is neede ...
- mysql中数据类型的取值范围
mysql整型bigint.int.mediumint.smallint 和 tinyint的语法介绍,如下: 1.bigint 从 -2^63 (-9223372036854775808) 到 2^ ...
- HTML Basic Document and UML
HTML Basic Document <html> <head> <title>Document name goes here</title> < ...
- 《Hey程序员 你适合加入创业公司吗?》再补充
笔者经过多年的走访发现,不是所有优秀的程序员都能在创业公司如鱼得水.根据笔者的经验,具备下面几点优秀品质的程序员会更容易适应创业公司的环境. 1.娴熟的调试技巧可以说,程序员的大部分时间都花在调试程序 ...
- 【转发】网易邮箱前端技术分享之javascript编码规范
网易邮箱前端技术分享之javascript编码规范 发布日期:2013-11-26 10:06 来源:网易邮箱前端技术中心 作者:网易邮箱 点击:533 网易邮箱是国内最早使用ajax技术的邮箱.早在 ...