AcWing 906. 区间分组
原题链接
简单
作者:
xxxx_XXXXX
,
2021-04-05 11:52:46
,
所有人可见
,
阅读 224
C++ 代码
/*
将区间按照左端点排序
遍历区间
如果当前区间l大于 某个区间的max_r ,则插入这个区间,改变当前max_r 。 条件1
如果不能找到这样的区间,则新建立一个区间然后插入
条件1 反义句 == 最小的max_r 都大于当前区间l,则说明一定找不到一个集合
可以给当前区间插入。
*/
#include <bits/stdc++.h>
using namespace std ;
const int N = 1e5 + 100 ;
struct node{
int l , r ;
bool operator < (const node & w) const{
return l < w.l ; //按照左端点从小到大排序
}
}nodes[N] ;
int main(){
ios::sync_with_stdio(false) ;
int n ; cin >> n ;
for(int i = 0 ; i < n ; i++) cin >> nodes[i].l >> nodes[i].r ;
sort(nodes , nodes+n) ;
priority_queue<int,vector<int> , greater<int>> heap ;
int cnt = 0 , Max_r = 2e9 ;
for(int i = 0 ; i < n ; i++){
int l = nodes[i].l , r = nodes[i].r ;
if(heap.empty() || heap.top() >= l ) //条件1的反义句
heap.push(r);
else{ //能找到一个组可以放,我们就把它让如最小值的组,heap会自动维护最小值
heap.pop(); heap.push(r) ;
}
}
cout<<heap.size();
return 0 ;
}