问题
https://vjudge.net/problem/UVA-11776
分析
排序,按照开始时间从小到大排队,然后使用优先队列维护结束时间
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <map>
#include <string>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long LL;
const int maxn=1000+5;
struct Task{
int s,e;
bool operator < (const Task &rhs) const {
return s<rhs.s;
}
}task[maxn];
int n,kase=0,a[maxn],b[maxn];
int main(void){
while(scanf("%d",&n)==1 && n!=-1){
priority_queue<int,vector<int>,greater<int> > q;
for(int i=0;i<n;++i){
scanf("%d%d",&task[i].s,&task[i].e);
}
sort(task,task+n);
int ans=0;
for(int i=0;i<n;++i){
if(q.empty() || q.top()>=task[i].s){
q.push(task[i].e);
++ans;
}else {
q.pop();
q.push(task[i].e);
}
}
printf("Case %d: %d\n",++kase,ans);
}
return 0;
}