畜栏预定

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

注意:

题目陷阱: 样例给出的东西是无序的 你可能需要自己先排序

如果你是在有序考虑 那么就要问问需不需要先排序

贪心类型:范围放缩 不够再用新的

posted @ 2021-12-30 16:32  __iostream  阅读(62)  评论(0)    收藏  举报