把所有点按右端点从小到大排序,
贪心排序一般都是按右端点(从小到大)排序,因为这样全包含就会归为前面,
如果按左端点排序,那么全包含就是后面,这样不管选前端点还是后端点都无法管到

如果已选点<线段左端点,则把线段右端点选入(使得选择使对后面潜在利益最大化)
然后证明选法可行,把后序线段按与该线段位置进行分类:
1.后半包含
2.完全不包含


当前线选右端点,则后半包含符合条件,后完全不包含选择自身右端
注意这里前半包含和完全包含由于是按右端排序所以排在前面(已经被处理了不用管)
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;

struct P{
    int l,r;
};
P p[N];

int n,pre,cnt;

bool cmp(P a,P b){
    return a.r<b.r;
}

int main(){
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>p[i].l>>p[i].r;
    }
    sort(p,p+n,cmp);
    pre=p[0].r; cnt++;
    for(int i=0;i<n;i++){
        if(p[i].l>pre) pre=p[i].r,cnt++;
    }
    cout<<cnt<<endl;
    return 0;
}
注意
之前是按左端点排序选右端点,错了
由于按左排序的话图中全包含就会变成后序线段,选右端点使得全包含不满足所有线段题目要求