活动安排问题(贪心 + 优先队列)

有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室? 

 收起

输入

第一行一个正整数n (n <= 10000)代表活动的个数。
第二行到第(n + 1)行包含n个开始时间和结束时间。
开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000

输出

一行包含一个整数表示最少教室的个数。

输入样例

3
1 2
3 4
2 9

输出样例

2

思路:我们只需对起始时间进行从小到大的排序,然后创建一个教室(优先队列容器),根据教室举办活动的最早结束时间重载优先队列,然后比对一下。

代码如下:

#include
#define LL long long
using namespace std;
struct node
{
    LL l,r;
}eg[10010];
bool cmp(node x,node y)
{
    if(x.l==y.l)
        return x.r>y.r;
    else
        return x.lQ;
    note q,p;
    q.lim = eg[0].r;
    Q.push(q);
    for(int i=1;i

 

你可能感兴趣的:(STL)