提交时间:2022-07-19 12:03:19
运行 ID: 52372
#include <bits/stdc++.h> using namespace std; int n,cnt=1,ans; struct Node { int l,r; } a[500005],now; inline bool Cmp(Node a,Node b) { return a.l==b.l?a.r>b.r:a.l<b.l; } int f[500005],longest=1; inline int Binary_Search(int l,int r,int k) { if(l==r) return l; else { int mid=(l+r)>>1; if(f[mid]>=k) Binary_Search(mid+1,r,k); else Binary_Search(l,mid,k); } } void Search(int now,int cnt) { ans=max(ans,cnt); for(int i=now+1; i<=n; i++) { if(a[now].l<=a[i].l && a[i].r<=a[now].r) { Search(i,cnt+1); } } } int main() { ios::sync_with_stdio(false); cin.tie(0),cout.tie(0); cin>>n; for(int i=1; i<=n; i++) cin>>a[i].l>>a[i].r; sort(a+1,a+1+n,Cmp); // if(n<=10) // { // Search(1,1); // cout<<ans<<'\n'; // return 0; // } f[1]=a[1].r,longest=1; for(int i=2; i<=n; i++) { if(f[longest]>=a[i].r) f[++longest]=a[i].r; else { int pos=Binary_Search(1,longest,a[i].r); f[pos]=a[i].r; } } cout<<longest<<'\n'; return 0; }