与上一题:区间选点的联系
本题的代码与上一题:区间选点完全相同。本题要求的是最大不相交区间的数量,而我们来看看区间选点的题目要求:选择尽量少的点,使得每个区间内至少有一个点。在这题的条件要求下,最少的点数,其实就是本题的最大不相交的区间数。因为对于这组区间里的每个区间,都至少要放一个点来覆盖这个区间。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef pair<int,int> pii;
vector<pii> all;
bool cmp(pii &a,pii &b){
return a.second < b.second;
}
int main(){
int n;
cin>>n;
while(n--){
int a,b;
cin>>a>>b;
all.push_back({a,b});
}
sort(all.begin(),all.end(),cmp);
int res = 0, ed = -2e9;
for(auto t:all){
if(t.first > ed){
res++;
ed = t.second;
}
}
cout<<res<<endl;
return 0;
}