[Ybtoj de alta eficiencia avanzada 1.2] C. Reserva de corral [codicioso]

Inserte la descripción de la imagen aquí
Enlace del título original

análisis

Estrategia codiciosa:
clasifica el bullpen por el punto final izquierdo.

Si el extremo derecho del bullpen no tiene un bullpen, agregue uno,
luego busque el primero en el extremo izquierdo de la parte posterior que sea más grande que el extremo derecho y coloque el mismo bullpen que la vaca del extremo derecho, y
actualice ans por el camino.

No he tenido una muestra pero 100 puntos es indignante

Subir código

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<iomanip>
#include<cmath>
using namespace std;

int n,ans[500001],num;

struct node
{
    
    
	int s,p;
}a[100001],b[100001];

int cmp(node x,node y)
{
    
    
	return x.s<y.s;
}

int main()
{
    
    
	cin>>n;
	for(int i=1;i<=n;i++)
	{
    
    
		cin>>a[i].s>>b[i].s;
		a[i].p=b[i].p=i;
	}
	sort(a+1,a+n+1,cmp);
	sort(b+1,b+n+1,cmp);
	int j=1;
	for(int i=1;i<=n;i++)
	{
    
    
		if(j<=n) j++;
		if(!ans[b[i].p]) ans[b[i].p]=++num;
		while(a[j].s<=b[i].s&&j<=n) j++;
		ans[a[j].p]=ans[b[i].p];
	}
	cout<<num<<endl;
	for(int i=1;i<=n;i++)
	{
    
    
		cout<<ans[i]<<endl;
	}
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/dglyr/article/details/112132199
Recomendado
Clasificación