https://www.51nod.com/Challenge/Problem.html#!#problemId=1428

有若干个活动,第i个开始时间和结束时间是[Si,fi),同一个教室安排的活动之间不能交叠,求要安排所有活动,最少需要几个教室?
输入
第一行一个正整数n (n <= 10000)代表活动的个数。
第二行到第(n + 1)行包含n个开始时间和结束时间。
开始时间严格小于结束时间,并且时间都是非负整数,小于1000000000
输出
一行包含一个整数表示最少教室的个数。
输入样例
3
1 2
3 4
2 9
输出样例
2

如果要加入的活动开始时间小于已开始活动的最早结束时间,则新开一个教室

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <cstdio>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <queue>
#include <set>
#include <utility>
#include <vector>
#include <map>
#include <stack>
using namespace std;
#define MAX 10000+10
#define INF 0x3f3f3f3f
int n,ans;
pair<int,int> a[MAX];
priority_queue<int > p;
int main(){
//freopen("in", "r", stdin);
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%d %d",&a[i].first,&a[i].second);
}
sort(a,a+n);
for(int i=0;i<n;i++){
if(p.size()&&-p.top()<=a[i].first){
p.pop();
p.push(-a[i].second);
}else {
ans++;
p.push(-a[i].second);
}
}
printf("%d",ans);
return 0;
}