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