分析
欲張り戦略:
ブルペンを左端点で並べ替えます。
ブルペンの右端にブルペンがない場合は、ブルペンを追加
してから、背中の左端で右端よりも大きい最初のブルペンを見つけて、右端の牛と同じブルペンを配置し、次のように
更新します。道。
私はサンプルを持っていませんが、100ポイントはとんでもないです
コードをアップロード
#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;
}