POJ 2528 Mayor's posters(线段树)
题意 :建一堵墙粘贴海报,每个候选人只能贴一张海报,海报的高度与墙一样高,一张海报的宽度是整数个单位,墙被划分为若干个部分,每个部分的宽度为一个单位,每张海报完全的覆盖一段连续的墙体,墙体的宽度占整数个单位。因为候选人将海报贴到墙上的时候可能会将别人的覆盖或覆盖一部分,给出海报的大小,选举墙上张贴的位置,和张贴的次序,然后问你最后还能看到几张海报。
思路 : 这个墙因为有10000000单位长,而n最大有10000,所以要先进行离散化,但是离散化之前要先将数字存起来,排序之后再将每相邻的两个数之间一个数加入离散的数组,离散化的处理 :先将n张海报的左边界,右边界中间位置存储在数组x里,然后递增排序x,剔除其中重复的坐标,可以当成染色问题,就是贴上一张海报就将这张海报染上颜色。
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <algorithm>
#include <stdlib.h>
#include <algorithm> const int maxn = ; bool vis[maxn] ;//颜色i被使用的标志是vis[i]
int l[maxn],r[maxn],num[maxn*],tree[maxn*],x[maxn*] ;
//不大于左边界的不同坐标数为l[i],不大于右边界的不用坐标数为r[i],左边界的坐标为x[3*i-2],右边界的坐标
//为x[3*i-1],中间坐标为x[3*i]。x数组排序后在x[1...j]中不重复的坐标数为num[i].
int c,n ;
//线段树中结点k标记为tree[k],即代表区间的颜色码 using namespace std ; int binarysearch(int sum)//计算坐标区间[0...sum]中不同的坐标数
{
int l = , r = *n ;
while(r >= l)
{
int mid = (l+r) >> ;
if(x[mid] <= sum)
l = mid+ ;
else r = mid-;
}
return num[r] ;
} void update(int i)
{
if(!tree[i]) return ;
tree[i*] = tree[i*+] = tree[i] ;
tree[i] = ;
} void change(int tl,int tr,int l,int r,int i,int co)
{
if(tr < l || tl > r) return ;
if(tl <= l && r <= tr)
{
tree[i] = co ;
return ;
}
update(i) ;
int mid = (l+r) >> ;
change(tl,tr,l,mid,i*,co) ;
change(tl,tr,mid+,r,i*+,co) ;
} int require(int l ,int r,int i)
{
int mid = (l+r) >> ;
if(tree[i])
{
if(!vis[tree[i]])//在节点i已标记的情况下,若当前颜色未先涂过,则置该颜色使用标志并返回1,否则返回0,以防重复标记
{
vis[tree[i]] = ;
return ;
}
return ;
}
if(l == r) return ;
return require(l,mid,i*)+require(mid+,r,i+i+) ;
} void Init()//离散化处理海报信息
{
scanf("%d",&n) ;
for(int i = ; i <= n ;i++)
{
scanf("%d %d",&l[i],&r[i]) ;//读入每张海报的左右边界。
x[i*-] = l[i] ; x[i*-] = r[i] ;x[i*] = (l[i]+r[i])>> ;
}
sort(x+,x+*n+) ;
memset(num,,sizeof(num)) ;
for(int i = ; i <= *n ; i++)
{
num[i] = num[i-] ;
if(x[i] != x[i-]) num[i]++ ;
}
for(int i = ; i <= n ; i++)
{
l[i] = binarysearch(l[i]) ;
r[i] = binarysearch(r[i]) ;
}
} void solve()
{
memset(tree,,sizeof(tree)) ;//线段树中每个结点代表的区间未涂色
for(int i = ; i <= n ;i++)
change(l[i],r[i],,*n,,i) ;
memset(vis,false,sizeof(vis)) ;
printf("%d\n",require(,*n,) );
}
int main()
{
scanf("%d",&c) ;
for(int i = ; i <= c ; i++)
{
Init() ;
solve() ;
}
return ;
}
POJ 2528 Mayor's posters(线段树)的更多相关文章
- POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化)
POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化) 题意分析 贴海报,新的海报能覆盖在旧的海报上面,最后贴完了,求问能看见几张海报. 最多有10000张海报,海报 ...
- poj 2528 Mayor's posters 线段树+离散化技巧
poj 2528 Mayor's posters 题目链接: http://poj.org/problem?id=2528 思路: 线段树+离散化技巧(这里的离散化需要注意一下啊,题目数据弱看不出来) ...
- poj 2528 Mayor's posters 线段树区间更新
Mayor's posters Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://poj.org/problem?id=2528 Descript ...
- POJ 2528 Mayor's posters(线段树+离散化)
Mayor's posters 转载自:http://blog.csdn.net/winddreams/article/details/38443761 [题目链接]Mayor's posters [ ...
- poj 2528 Mayor's posters 线段树+离散化 || hihocode #1079 离散化
Mayor's posters Description The citizens of Bytetown, AB, could not stand that the candidates in the ...
- POJ 2528 Mayor's posters (线段树)
题目链接:http://poj.org/problem?id=2528 题目大意:有一个很上的面板, 往上面贴海报, 问最后最多有多少个海报没有被完全覆盖 解题思路:将贴海报倒着想, 对于每一张海报只 ...
- poj 2528 Mayor's posters(线段树)
题目:http://poj.org/problem?id=2528 题意:有一面墙,被等分为1QW份,一份的宽度为一个单位宽度.现在往墙上贴N张海报,每张海报的宽度是任意的, 但是必定是单位宽度的整数 ...
- POJ 2528 Mayor's posters (线段树区间更新+离散化)
题目链接:http://poj.org/problem?id=2528 给你n块木板,每块木板有起始和终点,按顺序放置,问最终能看到几块木板. 很明显的线段树区间更新问题,每次放置木板就更新区间里的值 ...
- POJ 2528 Mayor's posters (线段树+离散化)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions:75394 Accepted: 21747 ...
- POJ 2528 Mayor’s posters (线段树段替换 && 离散化)
题意 : 在墙上贴海报, n(n<=10000)个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000).求出最后还能看见多少张海报. 分析 ...
随机推荐
- C#操控条形码扫描枪
// 条码扫描器 // 窗体部分相关代码: using System; using System.Collections.Generic; using System.ComponentModel; u ...
- Nuget 自动上传
1:参考https://newnugetpackage.codeplex.com/wikipage?title=NuGet%20Package%20To%20Create%20A%20NuGet%20 ...
- SignalR: The new old thing
As you can see, this is my first blog posted in cnblog. If you find any mistake, don’t hesitate to t ...
- 20160427Struts2--入门1
参考资料来自传智播客:非原创,只是做个笔记: 一.Struts2简介: Struts2是在WebWork2基础发展而来的.和struts1一样, Struts2也属于MVC框架.不过有一点大家需要注意 ...
- jsf taglib定义函数
创建文件 在文件中添加function标签 <function> <function-name>getFileContent</function-name> & ...
- pop动画大全 只能时代程序员更应该关心效果而不是冷冰冰的代码
下载地址 https://pan.baidu.com/s/1o8pQWau
- objective-c中的category
如果有如下一个类 #import <Foundation/Foundation.h> @interface Person : NSObject @property int age; @en ...
- 24种设计模式--策略模式【Strategy Pattern】
刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题,嘿,还别说,真是解决了大问题,搞到最后是周瑜赔了夫人有折兵呀,那咱们先看看这个场景是什么样子的. 先说这个场景 ...
- e+开发中的各种问题
1.数据交换后走的查询公式还是controller所配置的公式
- Html代码Font-Size中px与pt的区别
一个是设备坐标,一个是逻辑坐标,两者是不同的. px是个相对单位,一般像素的参考值为:在一个像素密度是90 pdi的显示器上,正常人从距离显示器28英寸处看一个像素的视角应该不小于0.0227度. 1 ...