P2434 [SDOI2005]区间
2017-06-24 19:23
141 查看
题目描述
现给定n个闭区间[ai, bi],1<=i<=n。这些区间的并可以表示为一些不相交的闭区间的并。你的任务就是在这些表示方式中找出包含最少区间的方案。你的输出应该按照区间的升序排列。这里如果说两个区间[a, b]和[c, d]是按照升序排列的,那么我们有a<=b<c<=d。请写一个程序:
读入这些区间;
计算满足给定条件的不相交闭区间;
把这些区间按照升序输出。
输入输出格式
输入格式:第一行包含一个整数n,3<=n<=50000,为区间的数目。以下n行为对区间的描述,第i行为对第i个区间的描述,为两个整数1<=ai<bi<=1000000,表示一个区间[ai, bi]。
输出格式:
输出计算出来的不相交的区间。每一行都是对一个区间的描述,包括两个用空格分开的整数,为区间的上下界。你应该把区间按照升序排序。
输入输出样例
输入样例#1:5 5 6 1 4 10 10 6 9 8 10
输出样例#1:
1 4 5 10 一开始傻乎乎的用线段树写,写了写发现自己的线段树貌似比暴力还要慢,于是看了看题解发现原来跑一边扫描线就可以。。。
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int MAXN=50001; struct node { int bg,ed; }a[MAXN]; int n; int comp(const node & a,const node & b) { return a.bg<b.bg; } int main() { ios::sync_with_stdio(false); cin>>n; for(int i=1;i<=n;i++) cin>>a[i].bg>>a[i].ed; sort(a+1,a+n+1,comp); int l=a[1].bg; int r=a[1].ed; int now=1; while(now++&&now<=n) { if(a[now].bg>r) { printf("%d %d\n",l,r); l=a[now].bg; r=a[now].ed; } r=max(a[now].ed,r); } printf("%d %d\n",l,r); return 0; }
相关文章推荐
- 洛谷P2434 [SDOI2005]区间
- 洛谷 P2434 [SDOI2005]区间
- 洛谷 P2434 [SDOI2005]区间
- P2434 [SDOI2005]区间
- P2434 [SDOI2005]区间
- 洛谷P2434 [SDOI2005]区间
- [SDOI2005]区间
- luogu P2434 [SDOI2005]区间
- [luoguP2434] [SDOI2005]区间(贪心)
- [SDOI2005]区间
- bzoj 2243 [SDOI2011]染色 树链剖分区间更新
- 【bzoj1742】[Usaco2005 nov]Grazing on the Run 边跑边吃草 区间dp
- BZOJ 2243 [SDOI2011]染色 树链剖分+LCA+区间合并线段树
- [SDOI2005]反素数
- 洛谷 P2439 [SDOI2005]阶梯教室设备利用
- 「BZOJ3226」[SDOI2008] 校门外的区间(线段树好题)
- 【SDOI2008】【BZOJ3226】校门外的区间
- 洛谷 P2335 [SDOI2005]位图 [DP]
- 【BZOJ】【P3226】【Sdoi2008】【校门外的区间】【题解】【线段树】
- [BZOJ1951][SDOI2005]古代猪文(数论好题)