标签:部分 mes www style string const i++ ref 超时
动规基础部分,不废话了看代码肯定能懂
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=100010; int n,a[maxn],f[maxn],ans,min; int check(int k,int l,int r)//二分查找函数,避免超时 { while(l<r) { int mid=(l+r)>>1; if(k>=f[mid]) l=mid+1; else r=mid; } return l; } int main() { scanf("%d",&n); for(int i=0;i<n;i++) scanf("%d",a+i); f[1]=a[0]; for( int i=1;i<n;i++) { if(f[ans]<a[i]) min=++ans;//如果当前数比子序列最后一数大,满足递增接在后面即可 else min=check(a[i],1,ans+1);//否则进行二分查找找到第一个比当前数更小的数,替换该数后的数 f[min]=a[i]; } printf("%d\n",n-ans);//用原数列长度减去最长子序列长度,即为需要剔除的数的数目 return 0; }
标签:部分 mes www style string const i++ ref 超时
原文地址:https://www.cnblogs.com/charlesss/p/10290481.html