slongle
11/20/2017 - 11:54 AM

UVa 10534 - Wavio Sequence

UVa 10534 - Wavio Sequence

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;
const int MAXN=1e5+5;
const int MAXM=1e5+5;
const int mod=1e9+7;

int n,x[MAXN],f[MAXN],g[MAXN][2];

int main(){
    while(scanf("%d",&n)!=EOF){
        for(int i=1;i<=n;i++) scanf("%d",&x[i]);
        int len;
        f[0]=len=0;
        for(int i=1;i<=n;i++){
            int l=1,r=len,mid,pos=0;
            while(l<=r){
                mid=(l+r)/2;
                if (f[mid]<x[i]) pos=mid,l=mid+1;
                else r=mid-1;
            }
            f[pos+1]=x[i];
            g[i][0]=pos+1;
            len=max(len,pos+1);
        }
        f[0]=len=0;
        for(int i=n;i>=1;i--){
            int l=1,r=len,mid,pos=0;
            while(l<=r){
                mid=(l+r)/2;
                if (f[mid]<x[i]) pos=mid,l=mid+1;
                else r=mid-1;
            }
            f[pos+1]=x[i];
            g[i][1]=pos+1;
            len=max(len,pos+1);
        }
        int ans=0;
        for(int i=1;i<=n;i++) ans=max(ans,min(g[i][0],g[i][1]));
        printf("%d\n",ans*2-1);
    }
    return 0;
}