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;
}
posted @ 2026-03-04 01:14  peter_shen  阅读(9)  评论(0)    收藏  举报