#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;
}
poj2533Longest Ordered Subsequence LIS(优化)
最新推荐文章于 2024-08-17 03:38:43 发布