贪心区间分组
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
const int N = 100010;
int n;
struct Range{
int l, r;
bool operator< (const Range &W)const{
return l < W.l;
}
}range[N];
int main(){
scanf("%d", &n);
for(int i = 0; i < n; i++){
int l, r;
scanf("%d%d", &l, &r);
range[i] = {l, r};
}
sort(range, range + n);
priority_queue<int, vector<int>, greater<int>> heap; // 小根堆, 用来记录每个分组区间的最右侧端点
// 小根堆会自动对堆中的元素进行排序,小的放在堆顶 heap.top() 取得堆顶元素
// heap.pop() 弹出堆顶元素, 删除的意思
// heap.push(i) 向堆中插入元素 i
for(int i = 0; i < n; i++){
auto r = range[i];
if(heap.empty() || heap.top() >= r.l) heap.push(r.r);
else{
heap.pop();
heap.push(r.r);
}
}
printf("%d", heap.size());
return 0;
}