Solución a Luogu P2434 [[SDOI2005] intervalo]

La estrategia codiciosa para este problema es ordenar el punto de inicio del intervalo de pequeño a grande, y luego comenzar a fusionarse.

Los intervalos se ordenan de pequeño a grande en orden de punto de partida, lo que puede maximizar la posibilidad de una fusión exitosa.

Este suplemento cerebral no debería ser difícil de inventar. (El lector no es difícil de probarse a sí mismo

Código directamente:

#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;
}

Supongo que te gusta

Origin www.cnblogs.com/IzayoiMiku/p/12759745.html
Recomendado
Clasificación