提交时间:2022-07-19 11:51:51
运行 ID: 52296
#include <bits/stdc++.h> using namespace std; int n,pos=0; struct mb { int l,r; } a[50005],f[50005]; bool Cmp(mb a,mb b) { if(a.l!=b.l) return a.l<b.l; else return a.r>b.r; } int ef(mb a) { int s=0,w=pos; while(w>s) { int midd=(s+w)/2; if(a.l<=f[midd].l && a.r>=f[midd].r) s=midd+1; else w=midd; } return s; } int main() { cin>>n; for(int i=1; i<=n; i++) cin>>a[i].l>>a[i].r; sort(a+1,a+1+n,Cmp); f[++pos]=a[1],f[0].l=0xffff,f[0].r=-0xffff; for(int i=2; i<=n; i++) { if(a[i].l>=f[pos].l && a[i].r<=f[pos].r) f[++pos]=a[i]; else { int k=ef(a[i]); f[k]=a[i]; } } cout<<pos; return 0; }