poj2528 Mayor's posters
来源:互联网 发布:linux修改防火墙配置 编辑:程序博客网 时间:2024/06/01 09:31
题意:一维的墙上,n个人去贴海报,海报覆盖一定的区间,后贴的可能覆盖先贴的,问最后能看到多少张海报。
思路:线段树(区间更新)+离散化。因为墙的范围太大,n的范围小,所以需要离散化。离散化时注意如果两点不连续,需要在中间插入一个点,不然会出现bug。
#include <iostream> #include <stdio.h> #include <cmath> #include <algorithm> #include <iomanip> #include <cstdlib> #include <string.h> #include <vector> #include <queue> #include <stack> #include <map> #include <set> #include <ctype.h> #define ll long longusing namespace std; int pl[20010];int pr[20010];int post[40010];struct node{int l; int r;int val;bool flag;};node tree[160010];void build_tree(int n,int l,int r){tree[n].l=l; tree[n].r=r; tree[n].flag=0;if(l==r)return;int mid=(l+r)/2;build_tree(n*2,l,mid);build_tree(n*2+1,mid+1,r);}void update(int n,int l,int r,int v){if(tree[n].l==l&&tree[n].r==r){tree[n].val=v; tree[n].flag=1;return;}int mid=(tree[n].l+tree[n].r)/2;if(tree[n].flag){tree[n].flag=0;update(n*2,tree[n].l,mid,tree[n].val);update(n*2+1,mid+1,tree[n].r,tree[n].val);}if(r<=mid){update(n*2,l,r,v);}else{if(l<=mid){update(n*2,l,mid,v);update(n*2+1,mid+1,r,v);}else{update(n*2+1,l,r,v);}}}void query(int n,int l,int r){if(tree[n].flag){post[tree[n].val]=1;return;}if(l==r)return;int mid=(l+r)/2;query(n*2,l,mid);query(n*2+1,mid+1,r);}map<int,int> mp;int main(){int t;cin>>t;while(t--){memset(post,0,sizeof(post));mp.clear();int n;cin>>n;for(int i=1;i<=n;i++){scanf("%d%d",&pl[i],&pr[i]);mp[pl[i]]=1;mp[pr[i]]=1;}int cnt=1;map<int,int>::iterator last=mp.begin();for(map<int,int>::iterator it=mp.begin();it!=mp.end();it++){if(last!=it&&last->first+1<it->first)cnt++;//在不连续的点中间插入点,防止中间点被忽略it->second=cnt++;last=it;}build_tree(1,1,cnt-1);for(int i=1;i<=n;i++){update(1,mp[pl[i]],mp[pr[i]],i);}query(1,1,cnt-1);int ans=0;for(int i=1;i<cnt;i++)if(post[i])ans++;cout<<ans<<endl;}return 0;}
0 0
- POJ2528 Mayor's posters
- POJ2528 Mayor's posters
- poj2528 Mayor's posters
- POJ2528 Mayor's posters
- POJ2528 Mayor's posters
- POJ2528--Mayor's posters
- POJ2528 Mayor's posters
- POJ2528 Mayor's posters
- POJ2528 Mayor's posters
- poj2528-Mayor's posters
- poj2528 Mayor's posters
- poj2528 Mayor's posters
- poj2528 Mayor's posters
- poj2528 Mayor's posters
- POJ2528 Mayor's posters
- POJ2528 Mayor's posters
- poj2528 Mayor’s posters
- poj2528 Mayor's Posters
- 2014校园招聘之九(待整理)
- oracle的sqlnet.ora,tnsnames.ora,listener.ora三个配置文件及关系
- 2014校园招聘之十(待整理)
- C++总结
- C++ primer 第五版 中文版 练习 11.33 个人code
- poj2528 Mayor's posters
- GPON EPON介绍
- Android多文件上传
- linux chrome运行android应用方法
- 2014校园招聘之十一(待整理)
- 设计模式【工厂方法模式】
- 如何破解验证码
- 2014校园招聘之十二(待整理)
- linux shell if 参数