Description
周老师无聊时乱写了 n 个区间,但处女座的他随后又想将 n 个区间整理合并,但他发现区间太多了,于是他想请你帮帮他
Input
每次测试输入多组数据(小于100组),对于每组输入数据:
第一行为 n ,代表 n 个区间
接下来 n 行,每行两个数 s , t 代表区间 [s,t]
0 < n < 15000
0 <= s <= t < 10000000
Output
第一行输出一个数字 q ,代表合并后剩余的区间个数
随后 q 行 按从小到大的顺序输出区间
Sample Input
3
2 4
1 3
7 7
Sample Output
2
1 4
7 7
#include<bits/stdc++.h> using namespace std; struct node{ long long s; long long t; }zone[15005]; bool cmp(node a,node b) { if(a.s!=b.s) return a.s < b.s; else return a.t < b.t; } int main() { int n,ans; while(~scanf("%d",&n)) { ans =0; for(int i = 0; i < n; i++) { scanf("%d %d",&zone[i].s,&zone[i].t); } sort(zone,zone+n,cmp); for(int i = 1; i < n; i++) { if(zone[i].s <= zone[ans].t&&zone[ans].t < zone[i].t) { zone[ans].t = zone[i].t; } else if(zone[i].s <= zone[ans].t&&zone[ans].t >= zone[i].t) { } else if(zone[i].s > zone[ans].t) { ans++; zone[ans].s = zone[i].s; zone[ans].t = zone[i].t; } } cout<<ans+1<<endl; for(int i = 0; i <= ans; i++) printf("%lld %lld\n",zone[i].s,zone[i].t); } return 0; }