hiho1079 - 数据结构 线段树(入门题,离散化)
描述
小Hi和小Ho在回国之后,重新过起了朝7晚5的学生生活,当然了,他们还是在一直学习着各种算法~
这天小Hi和小Ho所在的学校举办社团文化节,各大社团都在宣传栏上贴起了海报,但是贴来贴去,有些海报就会被其他社团的海报所遮挡住。看到这个场景,小Hi便产生了这样的一个疑问——最后到底能有几张海报还能被看见呢?
于是小Ho肩负起了解决这个问题的责任:因为宣传栏和海报的高度都是一样的,所以宣传栏可以被视作长度为L的一段区间,且有N张海报按照顺序依次贴在了宣传栏上,其中第i张海报贴住的范围可以用一段区间[a_i, b_i]表示,其中a_i, b_i均为属于[0, L]的整数,而一张海报能被看到当且仅当存在长度大于0的一部分没有被后来贴的海报所遮挡住。那么问题就来了:究竟有几张海报能被看到呢?
输入
每个测试点(输入文件)有且仅有一组测试数据。
每组测试数据的第1行为两个整数N和L,分别表示总共贴上的海报数量和宣传栏的宽度。
每组测试数据的第2-N+1行,按照贴上去的先后顺序,每行描述一张海报,其中第i+1行为两个整数a_i, b_i,表示第i张海报所贴的区间为[a_i, b_i]。
对于100%的数据,满足N<=10^5,L<=10^9,0<=a_i<b_i<=L。
输出
对于每组测试数据,输出一个整数Ans,表示总共有多少张海报能被看到。
/*******************************************************/
1.因为L很大,N很小,所以先离散化
2.
所以,这里用1个点代替一个长度为1的区间,即如果一张海波覆盖区间【2,7】,那么需要插入【2,6】
最后遍历整棵树,统计互异非零的标记个数
#include <map>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
const int N = *;
int input1[N],input2[N];
bool visited[N];
int ans = ; struct NODE{
int l,r;
int lazy;
NODE(){ lazy = ; }
int MID(){ return (l+r)>>; }
};
NODE segtree[N*]; void build(int id,int l,int r){
segtree[id].l = l;
segtree[id].r = r;
if(l==r) return ;
int mid = (l+r)>>;
build(id*,l,mid);
build(id*+,mid+,r);
} void modify(int id,int spos,int epos,int value){
if((segtree[id].l==spos)&&(segtree[id].r==epos)){
segtree[id].lazy = value;
return ;
} if(segtree[id].lazy){
segtree[id*+].lazy = segtree[id*+].lazy = segtree[id].lazy;
segtree[id].lazy = ;
} int mid = segtree[id].MID();
if(epos<=mid) modify(id*,spos,epos,value);
else if(spos>mid) modify(id*+,spos,epos,value);
else{
modify(id*+,spos,mid,value);
modify(id*+,mid+,epos,value);
}
} void traverse(int id){
if(segtree[id].lazy){
if(!visited[segtree[id].lazy]){
visited[segtree[id].lazy] = true;
ans++;
}
return ;
}
if(segtree[id].l==segtree[id].r) return ;
traverse(id*+);
traverse(id*+);
} int main(){
int n,L;
scanf("%d%d",&n,&L);
for(int i=;i<n*;i++) scanf("%d",input1+i);
memcpy(input2,input1,sizeof(int)*n*); std::map<int,int > mapping;
std::sort(input1,input1+n*);
int realN = std::unique(input1,input1+n*)-input1;
for(int i=;i<realN;i++) mapping[input1[i]] = i+; build(,,realN);
for(int i=;i<n;i++){
modify(,mapping[input2[i*]],mapping[input2[i*+]]-,i+);
}
memset(visited,false,sizeof(visited));
traverse(); printf("%d\n",ans);
return ;
}
hiho1079 - 数据结构 线段树(入门题,离散化)的更多相关文章
- hiho1080 - 数据结构 线段树(入门题,两个lazy tag)
题目链接 维护区间和,两个操作:一个是将某个区间设置成一个值,一个是将某个区间增加一个固定值 /**************************************************** ...
- poj_2528 Mayor's posters (线段树经典题+离散化方法)
由于题面中给定的wall最大长度为10 000 000:若简单用线段树势必会超时. 而注意到题面中规定了输入海报的个数<=1000:因此不妨离散化,使得线段中叶节点仅含有1000个,那么线段最大 ...
- [poj2104]可持久化线段树入门题(主席树)
解题关键:离线求区间第k小,主席树的经典裸题: 对主席树的理解:主席树维护的是一段序列中某个数字出现的次数,所以需要预先离散化,最好使用vector的erase和unique函数,很方便:如果求整段序 ...
- hdu 1166敌兵布阵(线段树入门题)
>>点击进入原题测试<< 思路:这两天在学线段树,这个题直接手敲一下线段树就行了,都没有用上懒人标记.入门题 cin,cout会超时,记得加std::ios::sync_wit ...
- 几道简单的线段树入门题 POJ3264&&POJ3468&&POJ2777
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 40687 Accepted: 19137 ...
- Mosaic HDU 4819 二维线段树入门题
Mosaic Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 102400/102400 K (Java/Others)Total S ...
- A Simple Problem with Integers(线段树入门题)
Description You have N integers, A1, A2, ... , AN. You need to deal with two kinds of operations. On ...
- HDU1698(线段树入门题)
Just a Hook Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Descrip ...
- POJ3264(线段树入门题)
Balanced LineupCrawling in process... Crawling failed Time Limit:5000MS Memory Limit:65536KB ...
随机推荐
- jquery分页点击后页面置顶
前台: <a href="#" ><span id='top'></span></a> js中: 放在分页事件后,数据加载完成后 j ...
- CLR寄宿和应用程序域
Win实际上将CLR作为一个COM服务器实现在一个DLL内,即为CLR定义了标准的COM接口,并为该接口和COM服务器分配一GUID,安装FrameWork时表示CLR的COM服务器被注册到注册表内. ...
- Chrome 开发工具系列
- 【Paper Reading】Learning while Reading
Learning while Reading 不限于具体的书,只限于知识的宽度 这个系列集合了一周所学所看的精华,它们往往来自不只一本书 我们之所以将自然界分类,组织成各种概念,并按其分类,主要是因为 ...
- http接口服务方结合策略模式实现总结
在项目中,我们经常会使用到http+xml的接口,而且不仅仅的是一个,可能会有多个http的接口需要实时的交互.但是http接口的接收消息的公共部分是一样的,只有每个接口的报文解析和返回报文是不同的, ...
- Event-driven programming-main loop
In computer programming, event-driven programming is a programming paradigm in which the flow of the ...
- ZBrush中SnakeHook蛇钩笔刷介绍
不同笔刷用着不同的作用,绘画出来的效果也是千姿百态,各有千秋,有些笔刷在使用的时候可以替代,但有些笔刷是无法替代,不可超越的,比如ZBrush®中给我们提供的,SnakeHook笔刷,该笔刷在模型表面 ...
- https://blog.csdn.net/sxf359/article/details/71082404
https://blog.csdn.net/sxf359/article/details/71082404
- IPv6地址分配
- JS怎样写闰年
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...