求选出最多条线段,使他们互不相交。贪心地按右端点从小到大排序即可。
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
#define ll long long
#define N 50010
#define inf 0x3f3f3f3f
inline int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar();
return x*f;
}
int n;
struct node{
int l,r;
}a[N];
inline bool cmp(node a,node b){return a.r<b.r;}
int main(){
// freopen("a.in","r",stdin);
n=read();for(int i=1;i<=n;++i) a[i].l=read(),a[i].r=read();
sort(a+1,a+n+1,cmp);int ans=0,R=0;
for(int i=1;i<=n;++i){
if(a[i].l>=R) R=a[i].r,++ans;
}printf("%d\n",ans);
return 0;
}