题解 洛谷P2434 【[SDOI2005]区间】

本题的贪心策略是以区间起点位置由小到大排序,然后开始合并。

区间按起点顺序由小到大排序,可以最大化合并成功的可能。

这个脑补应该不难想出来。(读者自证不难

直接上代码:

#include <bits/stdc++.h>
using namespace std;
struct interval
{
	int start_,end_;
	
} a[50010];//定义一个结构体 方便排序 
int n;
inline bool cmp(interval a,interval b)
{
	return a.start_<b.start_;
}

int main()
{
	cin>>n;
	for(int i(1);i<=n;i++)
		cin>>a[i].start_>>a[i].end_;
	sort(a+1,a+1+n,cmp);//按照区间起点排序 
	int l,r;
	l=a[1].start_;
	r=a[1].end_;
	int now(0);
	while (++now<=n)
	{
		if(a[now].start_>r)//区间断开处理 
		{
			cout<<l<<" "<<r<<endl;
			l=a[now].start_;
			r=a[now].end_>r?a[now].end_:r;
		}
		else r=max(a[now].end_,r);//没断开就维护一下 r
	}
	cout<<l<<" "<<r;//输出最后一组解 
	return 0;
}

猜你喜欢

转载自www.cnblogs.com/IzayoiMiku/p/12759745.html
今日推荐