挤牛奶,没反应过来,讲道理之前做优先队列的题就是为了做这道.
题目大意为给定N个牛的操作时间,问最少需要几个操作室.
按开始时间进行模拟即可\\
#include<cstdio>
#include<queue>
#include<algorithm>
#define N 1000010
using namespace std;
struct node
{
int s;
int e;
int id;
bool operator<(const node &a) const
{
if (e==a.e) return s>a.s; else return e>a.e;
}
} a[N];
int cmp(node a,node b)
{
if (a.s==b.s) return a.e<b.e;else return a.s<b.s;
}
int us[N];
int main()
{
int n;
while (~scanf("%d",&n))
{
int i,sum=1;
priority_queue<node>q;
for (i=1;i<=n;i++) {scanf("%d%d",&a[i].s,&a[i].e);a[i].id=i;}
sort(a+1,a+1+n,cmp);
q.push(a[1]);us[a[1].id]=1;
for (i=2;i<=n;i++)
{
if (q.size()!=0&&q.top().e<a[i].s)
{us[a[i].id]=us[q.top().id];q.pop();}
else
{sum++; us[a[i].id]=sum;}
q.push(a[i]);
}
printf("%d\n",sum);
for (i=1;i<=n;i++) printf("%d\n",us[i]);
}
}