计蒜客 最长不下降子序列 (nlogn算法)

来源:互联网 发布:淘宝电器节 编辑:程序博客网 时间:2024/06/05 19:15

求最长不下降子序列的长度

第一行为n,表示n个数第二行n个数

最长不下降子序列的长度

N小于5000for  each  num  < =maxint

样例输入

31 2 3

样例输出

3
分析:最长上升子序列之(nlogn算法)

AC代码:

#include<cstdio>#include<cstring>using namespace std;const int maxn=5000+5;int n;int a[maxn];int B[maxn];int binary_search(int x,int y,int w){while(x<y){int m=x+(y-x)/2;if(B[m]>=w)y=m;else x=m+1;}return x;}int main(){while(scanf("%d",&n)==1){for(int i=1;i<=n;i++)scanf("%d",&a[i]);B[1]=a[1];int len=1;for(int i=2;i<=n;i++){if(a[i]>=B[len]){B[++len]=a[i];}else {int j=binary_search(1,len,a[i]);B[j]=a[i];}}printf("%d\n",len);}return 0;}





原创粉丝点击