Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
52277 | alex_liu | 木板游戏 | C++ | 运行超时 | 0 | 2000 MS | 8052 KB | 776 | 2022-07-19 11:51:32 |
#include<bits/stdc++.h> #define int long long #define mp pair<int,int> #define l first #define r second using namespace std; inline int read(){ int x=0,f=0;char c=getchar(); while(c<48||c>57)f|=(!(c^'-')),c=getchar(); while(c>=48&&c<=57)x=(x<<1)+(x<<3)+(c^48),c=getchar(); return f?-x:x; } int n,cnt,b[500005]; mp a[500005]; signed main(){ n=read(); for(int i=1;i<=n;i++)a[i].l=read(),a[i].r=read(); sort(a+1,a+n+1,greater<mp>()); for(int i=1,ll,rr,mid;i<=n;i++){ if(!cnt||a[i].r<=b[cnt])b[++cnt]=a[i].r; else{ ll=1,rr=cnt; while(ll<rr){ mid=(ll+rr)>>1; if(b[mid]>=a[i].r){ ll=mid; if(b[mid-1]<a[i].r)break; } else rr=mid-1; } b[ll]=a[i].r; } } cout<<cnt<<endl; return 0; }