畜栏预定
2. 畜栏预定
给定n个线段 每个位置可以存一个线段 最少多少个位置存现段让各个线段不存在交集
int main()
{
n=read(); q.push( (Node){0x3f3f3f3f,0} );
for(rint i=1;i<=n;i++) p[i].l=read(),p[i].r=read(),p[i].id=i;
sort(p+1,p+n+1,cmp);
for(rint i=1;i<=n;i++)
{
Node tmp=q.top();
if( tmp.val >=p[i].l)
{
ans++; ret[p[i].id]=ans;
q.push( (Node){p[i].r,ans} );
}
else
{
q.pop(); ret[p[i].id]=tmp.id;
q.push( (Node){p[i].r,tmp.id} );
}
}
printf("%d\n",ans);
for(rint i=1;i<=n;i++) printf("%d\n",ret[i]);
return 0;
}
注意:
题目陷阱: 样例给出的东西是无序的 你可能需要自己先排序
如果你是在有序考虑 那么就要问问需不需要先排序
贪心类型:范围放缩 不够再用新的

浙公网安备 33010602011771号