一、题意:有n头牛,每头牛需要占用一个时间段的时间来挤奶,且必须有机器。问最少需要多少个机器
二、思路:区间贪心。把尽量多的牛放在一个棚子里,这样就可以使得用到的棚子数最少。只要任意两头牛的挤奶时间不重合,就可以放在一个棚子里。因为N值比较大,先标记好每一头牛的起始坐标,然后按起始时间从小到大进行排序,然后依次从前往后去遍历每一头牛。这里需要用一个优先队列来维护,以结束时间从小到大来维护,每次将一头牛与队列首的牛进行比较,如果满足它的起始时间大于队列首的那头牛的结束时间,这两头牛就可以使用同一个机器,否则就新加一个机器。这里需要注意牛的入队和出队
三、代码
#include"iostream"#include"stdio.h"#include"queue"#include"algorithm"using namespace std;const int MAXN=50005;struct Node{ int s,e,pos; friend bool operator<(Node a,Node b) { if(a.e==b.e) return a.sb.e; }};bool Cmp(Node a,Node b){ if(a.s!=b.s) return a.s que;int order[MAXN];int main(){ int n; while(scanf("%d",&n)==1) { for(int i=0;i que.top().e) { order[cows[i].pos]=order[que.top().pos]; que.pop(); que.push(cows[i]); } else { que.push(cows[i]); order[cows[i].pos]=que.size(); } } cout< <