2 条题解
-
2
太好的解法了!! 希望大家看一下
#include<bits/stdc++.h> using namespace std; int n,m; int f[200005]; int a[200005]; int g[200005]; int find(int l,int r,int num) { while(r-l>1) { int mid=(l+r)/2; if(g[mid]>=num) r=mid; else l=mid; } return r; } int main() { freopen("listwo.in","r",stdin); freopen("listwo.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&f[i]); int now=f[m]; int num=0; for(int i=1;i<=m-1;i++) if(f[i]<now) a[++num]=f[i]; a[++num]=f[m]; for(int i=m+1;i<=n;i++) if(f[i]>now) a[++num]=f[i]; int f0=0; for(int i=1;i<=num;i++) { if(a[i]>g[f0]) g[++f0]=a[i]; else g[find(0,f0,a[i])]=a[i]; } cout<<f0; }
信息
- ID
- 472
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- 递交数
- 126
- 已通过
- 19
- 上传者