#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
struct interval
{
int left;
int right;
};
bool compare(interval x,interval y)
{
return x.left<y.left;
}
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
interval arr[n];
for(int i=0;i<n;i++)
scanf("%d%d",&arr[i].left,&arr[i].right);
sort(arr,arr+n,compare);//根据左端点从小到大排序
interval ans[n];
ans[0].left=arr[0].left,ans[0].right=arr[0].right;//初始化
int index=0;//index指向ans数组末位
for(int i=1;i<n;i++)
{
if(ans[index].right>=arr[i].left&&ans[index].right<arr[i].right)//未完全重叠
ans[index].right=arr[i].right;
else if(ans[index].right<arr[i].left)//未重叠
{
ans[++index].left=arr[i].left;
ans[index].right=arr[i].right;
}
}
printf("%d\n",index+1);
for(int i=0;i<=index;i++)
printf("%d %d\n",ans[i].left,ans[i].right);
}
return 0;
}
1323区间合并(贪心算法),c++
猜你喜欢
转载自blog.csdn.net/qq_43661234/article/details/104321990
今日推荐
周排行