先对结构体进行排序,根据开始时间从小到大
维护一个结束时间的优先队列。
if 一个开始时间小于优先队列的top。肯定要开一个新教室(开始时间小于最小的结束时间,没有教室可以用)
else 最小结束时间的那个教室被新的时间占用,弹出top
每次都要把结束时间放进优先队列
#include<iostream>
#include<queue>
#include<vector>
#include<stack>
#include<algorithm>
#include<cmath>
#include<set>
#include<map>
#include<cstdio>
using namespace std;
typedef struct node{
int x,y;
};
bool cmp(node n1,node n2){
return n1.x<n2.x;
}
int main(){
int n;
scanf("%d",&n);
node no[10000+10];
for(int i=0;i<n;i++){
scanf("%d %d",&no[i].x,&no[i].y);
}
sort(no,no+n,cmp);
priority_queue<int,vector<int>,greater<int> > que;
que.push(no[0].y);
int sum=1;
for(int i=1;i<n;i++){
int a=no[i].x;
if(a>=que.top()){
que.pop();
}
else{
sum++;
}
que.push(no[i].y);
}
cout<<sum<<endl;
return 0;
}