Classrooms
.
.
题意:给定n间课室,k堂课,每间课室是能同时上1节课,问最多能上多少节课。
.
.
解法:贪心。按结束时间排序,对于当前状态,每新加入一节课,就找结束时间比它早的,并且最接近的进行更新,这样保证了最优,我们队是用了multi set记录。
.
.
#include <cstdio>
#include <iostream>
#include <complex>
#include <cmath>
#include <set>
#include <algorithm>
using namespace std;
const int maxn=200000+5;
int k, n;
struct Act {
int l, r;
} a[maxn];
bool cmp(Act a, Act b) {return a.r<b.r;}
multiset<int> s;
int main() {
scanf("%d%d", &n, &k);
for (int i=0; i<n; i++) {
scanf("%d%d", &a[i].l, &a[i].r);
}
sort(a, a+n, cmp);
for (int i=0; i<k; i++) s.insert(-1);
int ans=0;
for (int i=0; i<n; i++) {
multiset<int>::iterator it=s.lower_bound(a[i].l);
if (it!=s.begin()) {
it--;
s.erase(it);
s.insert(a[i].r);
ans++;
}
}
printf("%d\n", ans);
}