首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Uva 10534 浪头子序列(二次快速LIS)

2013-01-28 
Uva 10534 波浪子序列(二次快速LIS)不要以为简单就不仔细,你会知道错的!!#include iostream#include cs

Uva 10534 波浪子序列(二次快速LIS)

不要以为简单就不仔细,你会知道错的!!
#include <iostream>#include <cstdio>using namespace std;int n,L[10005],R[10005],a[10005],dp[10005];int binary(int i,int j,int key){   while(i<j){   int mid=(i+j)/2;if(dp[mid]==key) return mid;if(dp[mid]>key) j=mid;else i=mid+1;}return j;}int main(int argc, char *argv[]){int i,j,mi;while(cin>>n){for(i=1;i<=n;i++) scanf("%d",&a[i]);dp[j=1]=a[1]; L[1]=1;for(i=2;i<=n;i++){if(a[i]>dp[j]) {dp[++j]=a[i]; L[i]=j;}else {mi=binary(1,j,a[i]);  dp[mi]=a[i];  L[i]=mi;}}dp[j=1]=a[n]; R[n]=1;for(i=n-1;i>=1;i--){   if(a[i]>dp[j]) {dp[++j]=a[i]; R[i]=j;}else {   mi=binary(1,j,a[i]); dp[mi]=a[i];  R[i]=mi;}}for(mi=i=1;i<=n;i++)mi=max(mi,2*min(L[i],R[i]));cout<<mi-1<<endl;}return 0;}


 

热点排行