1323: 区间合并
本题是区间贪心的一种:将给定的所有重叠区间合并成一个区间,并按照左端点递增进行
输出。
#include <bits/stdc++.h>
using namespace std;
struct node{
int l,r;
}T[100005],ans[100005];
bool cmp(node a, node b ){
return a.l<b.l;
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
memset(ans,0,sizeof(ans));
int k;
for(int i=0;i<n;i++){
scanf("%d%d",&T[i].l,&T[i].r);
}
sort(T,T+n,cmp);
k=0;
ans[0].l=T[0].l;ans[0].r=T[0].r;
for(int i=1;i<n;i++){
if( ans[k].r>=T[i].l){
ans[k].r=max(ans[k].r,T[i].r);
}
else{
k++;
ans[k].l=T[i].l,ans[k].r=T[i].r;
}
}
printf("%d\n",k+1);
for(int i=0;i<=k;i++){
printf("%d %d\n",ans[i].l,ans[i].r);
}
}
return 0;
}

浙公网安备 33010602011771号