提交时间:2022-07-19 12:58:12

运行 ID: 52548

#include<cstdio> #include<iostream> #include<algorithm> using namespace std; const int N=5e5+5; int n,m,ans,f[N],t[N]; struct node { int l,r,k; }a[N]; bool cmp1(node x,node y) { if(x.l==y.l) return x.k<y.k; return x.l<y.l; } bool cmp2(node x,node y) {return x.r>y.r;} int lowbit(int x) {return x&(-x);} void insert(int x,int val) { for(;x<=m;x+=lowbit(x)) t[x]=max(t[x],val); } int query(int x) { int res=0; for(;x;x-=lowbit(x)) res=max(res,t[x]); return res; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d%d",&a[i].l,&a[i].r); sort(a+1,a+1+n,cmp2); for(int i=1;i<=n;i++) a[i].k= a[i].r==a[i-1].r ? m:++m; sort(a+1,a+1+n,cmp1); f[1]=1; insert(a[1].k,1); for(int i=2;i<=n;i++) f[i]=query(a[i].k)+1,insert(a[i].k,f[i]),ans=max(ans,f[i]); // for(int i=1;i<=n;i++) // printf("%d %d %d\n",a[i].l,a[i].k,f[i]); printf("%d",ans); return 0; }