poj 2528 Mayor's posters(线段树+离散化)
/*
poj 2528 Mayor's posters
线段树 + 离散化 离散化的理解:
给你一系列的正整数, 例如 1, 4 , 100, 1000000000, 如果利用线段树求解的话,很明显
会导致内存的耗尽。所以我们做一个映射关系,将范围很大的数据映射到范围很小的数据上
1---->1 4----->2 100----->3 1000000000----->4
这样就会减少内存一些不必要的消耗
建立好映射关系了,接着就是利用线段树求解
*/
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#define N 10000010
#define M 10005
using namespace std;
class EDGE{
public:
int ld, rd;
};
int tree[M*];//一共有M*2个端点,一个线段映射到四个点,左右端点, 左端点-1, 右端点+1, 数组的大小是线段树最底层数据个数的4倍
EDGE edge[M];
int p[M*];
int hash[N];
int n; int insert(int p, int lr, int rr, int ld, int rd){ if(tree[p] && lr<=ld && rd<=rr)//如果当前的区间[ld, rd]被包含在[lr, rr]中,而且[lr, rr]的区间已经被覆盖
return ;
else if(lr==ld && rr==rd){
tree[p]=;
return ;
}
else{
int mid=(lr+rr)>>;
int f1, f2, f3, f4;
if(mid>=rd)
f1=insert(p<<, lr, mid, ld, rd);
else if(mid<ld)
f2=insert(p<<|, mid+, rr, ld, rd);
else{
f3=insert(p<<, lr, mid, ld, mid);
f4=insert(p<<|, mid+, rr, mid+, rd);
}
tree[p]=tree[p<<] && tree[p<<|];//两个子树都被覆盖的时候父类才会被覆盖
if(mid>=rd)
return f1;
else if(mid<ld)
return f2;
else return f3 && f4;
}
}
/*
3
1 10
1 3
6 10
如果将一个线段离散化成两个点,输出地结果是2
如果是四个节点,输出的结果就是3
而正确的结果就是3
*/ int main(){
int t, i, nm;
scanf("%d", &t);
while(t--){
int maxR=;
scanf("%d", &n);
for(i=; i<n; ++i){
scanf("%d%d", &edge[i].ld, &edge[i].rd);
p[maxR++]=edge[i].ld-;
p[maxR++]=edge[i].ld;
p[maxR++]=edge[i].rd;
p[maxR++]=edge[i].rd+;
}
sort(p, p+maxR);
maxR=unique(p, p+maxR)-p;//元素去重
for(i=, nm=; i<maxR; ++i){
hash[p[i]]=++nm;
}
memset(tree, , sizeof(tree));//初始值是所有的点都没有被覆盖
int ans=;
for(i=n-; i>=; --i){//由外向里看真是个不错的主意
if(!insert(, , nm, hash[edge[i].ld], hash[edge[i].rd]))
++ans;
}
printf("%d\n", ans);
}
return ;
}
poj 2528 Mayor's posters(线段树+离散化)的更多相关文章
- poj 2528 Mayor's posters 线段树+离散化技巧
poj 2528 Mayor's posters 题目链接: http://poj.org/problem?id=2528 思路: 线段树+离散化技巧(这里的离散化需要注意一下啊,题目数据弱看不出来) ...
- 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 (线段树+离散化)
Mayor's posters Time Limit: 1000MS Memory Limit: 65536K Total Submissions:75394 Accepted: 21747 ...
- POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化)
POJ.2528 Mayor's posters (线段树 区间更新 区间查询 离散化) 题意分析 贴海报,新的海报能覆盖在旧的海报上面,最后贴完了,求问能看见几张海报. 最多有10000张海报,海报 ...
- POJ 2528 Mayor's posters (线段树区间更新+离散化)
题目链接:http://poj.org/problem?id=2528 给你n块木板,每块木板有起始和终点,按顺序放置,问最终能看到几块木板. 很明显的线段树区间更新问题,每次放置木板就更新区间里的值 ...
- POJ 2528 Mayor’s posters (线段树段替换 && 离散化)
题意 : 在墙上贴海报, n(n<=10000)个人依次贴海报,给出每张海报所贴的范围li,ri(1<=li<=ri<=10000000).求出最后还能看见多少张海报. 分析 ...
- 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(线段树)
题目:http://poj.org/problem?id=2528 题意:有一面墙,被等分为1QW份,一份的宽度为一个单位宽度.现在往墙上贴N张海报,每张海报的宽度是任意的, 但是必定是单位宽度的整数 ...
- POJ 2528 Mayor's posters (线段树)
题目链接:http://poj.org/problem?id=2528 题目大意:有一个很上的面板, 往上面贴海报, 问最后最多有多少个海报没有被完全覆盖 解题思路:将贴海报倒着想, 对于每一张海报只 ...
随机推荐
- 创建Xml文件与修改Xml文件
/// <summary> /// 修改节点 /// </summary> /// <param name="user">UserSafe 实体 ...
- Entity Framework EF6使用 MySql创建数据库异常解决办法
EF6使用MySQL数据库时,第一次创建数据库出现“Specified key was too long; max key length is 767 bytes”错误,解决办法请见以下连接. htt ...
- 屏幕适配1(Android 增强版百分比布局库 为了适配而扩展)
转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/46767825: 本文出自:[张鸿洋的博客] 这篇博文写得太好了,让我很激动,分 ...
- 工作随笔——UIButton的EdgeInsets + Swift中的正则表达式;
1.UIButton的EdgeInsets UIButton的EdgeInsets方法,是用来设置title和image对于上左下右四个方向的偏移,但是很奇怪的是,刚开始只有Image,titile也 ...
- 《理解 ES6》阅读整理:函数(Functions)(六)Purpose of Functions
明确函数的双重作用(Clarifying the Dual Purpose of Functions) 在ES5及更早的ES版本中,函数调用时是否使用new会有不同的作用.当使用new时,函数内的th ...
- jmSlip WEB前端滑屏组件
基于css3的滑屏组件 demo: http://slip.jm47.com 下载: https://github.com/jiamao/jmSlip 功能清单 区域横滚 整屏竖滚 滚动动画效果 区域 ...
- Jexus web server V5.4.5 已经发布
Jexus 是运行于 Linux/FreeBSD 平台的一款以支持 ASP.NET 为主要特色的,同时非常重视安全性和稳定性的高性能 WEB 服务器.最新版 5.4.5 已经发布,官方网站是:www. ...
- 微信公共平台开发-(.net实现)2--ACCESSTOKEN值获得
成功的走出第一步后,我们紧接着趁热打铁开始下一步: 成为了开发者之后微信平台会给您AppId和AppSecret,在订阅号中是没有的,所以因该申请一下服务号, 若没有请注意上一篇http://www. ...
- Javascript事件模型系列(三)jQuery中的事件监听方式及异同点
作为全球最知名的js框架之一,jQuery的火热程度堪称无与伦比,简单易学的API再加丰富的插件,几乎是每个前端程序员的必修课.从读<锋利的jQuery>开始,到现在使用jQuery有一年 ...
- DNS拾遗(一)
最近帮朋友注册域名配置主机,碰到一些DNS上的一些概念,惭愧于有一些东西已经忘记是啥意思,于是决定重新学习一下DNS方面的基本概念. 常用概念: TTL: TTL为Time to live的缩写,网络 ...