区间取点
给定n个区间,若让每个区间至少包含一个点,则需要至少几个点?
分析
只需要按区间右端点排序
然后遍历所有区间
逐个判断上一个点是否被包含在这个区间里
若不在
则加一个点,再更新点位置
若在
则跳过即可
我们初始化定为有一个点在第一个区间,并且点在其右端点
#include<iostream>
#include<algorithm>
using namespace std;
const int N=1e5+10;
pair<int,int> a[N];
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i].second>>a[i].first;
}
sort(a,a+n);
int res=1,now=a[0].first;
for(int i=1;i<n;i++){
if(a[i].second<=now&&now<=a[i].first){
continue;
}else {
res++;
now=a[i].first;
}
}
cout<<res;
return 0;
}