最长上升子序列 (dp)

来源:互联网 发布:无杠杆beta的算法 编辑:程序博客网 时间:2024/04/27 15:09

http://www.cnblogs.com/mengxm-lincf/archive/2011/07/12/2104745.html

 

#include<stdio.h>#include<algorithm>#include<string.h>using namespace std;int b[10000];int a[10000];int len,n;int erfen(int s,int t,int v){    int m;    while(s<=t)    {        int m=(s+t)>>1;        if(b[m]<=v)        s=m+1;        else t=m-1;    }    return s;}int main(){    while(~scanf("%d",&n))    {        int i,j;        b[0]=-1;        len=0;        for(i=1;i<=n;i++)        {            scanf("%d",&a[i]);        }        for(i=1;i<=n;i++)        {            if(a[i]>=b[len])            {                len++;                j=len;            }            else            {                j=erfen(1,len,a[i]);            }            b[j]=a[i];        }        printf("%d\n",len);    }}