poj2533Longest Ordered Subsequence LIS(优化)

来源:互联网 发布:巴拉密 知乎 编辑:程序博客网 时间:2024/05/02 01:34
#include <iostream>#include <cstring>#include <cstdio>using namespace std;const int N=1010;const int inf=0x3fffffff;int n,a[N],dp[N];int binary_search(int aim[],int d,int length){    int l=0,r=length,mid;    while(l!=r){        mid=(l+r)>>1;        if(d == aim[mid]) return mid;        else if(d < aim[mid]) r=mid;        else l=mid+1;    }    return l;}int main(){    cin>>n;    for(int i=1;i<=n;i++) scanf("%d",a+i);    int len=1,j=1;    dp[0]=-1;    for(int i=1;i<=n;i++){        dp[len]=inf;//与l=mid+1对应        j=binary_search(dp,a[i],len);        if(j == len) len++;        dp[j]=a[i];    }    cout<<len-1<<endl;    return 0;}

0 0