1先按区间左端点排序
2然后分类讨论,当新区间的左端点小于等于ed时,ed=max(ed,range[i].r)
当区间的左端点大于ed时,新开一个区间,st=range[i].l,ed=range[i].r
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10,INF=0x3f3f3f3f;
int n;
struct Range{
int l,r;
bool operator< (const Range &W)const{
return l<W.l;
}
}range[N];
int main(){
cin>>n;
for(int i=0;i<n;i++){
int a,b;
cin>>a>>b;
range[i]={a,b};
}
sort(range,range+n);
int st=-INF,ed=-INF;
int res=0;
for(int i=0;i<n;i++){
if(range[i].l<=ed) ed=max(ed,range[i].r);
else{
res++;
st=range[i].l,ed=range[i].r;
}
}
cout<<res<<endl;
}