UVa10534

来源:互联网 发布:java 天气预报接口 编辑:程序博客网 时间:2024/06/07 10:23

题目链接

简介:合唱队形,但是序列长度一定要是奇数

分析:
解题思路和和合唱队形一样,但是每个位置的答案为
min(f1[i]+f2[n-i+1])*2-1

//这里写代码片#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;const int N=10010;int a[N],b[N];int f1[N],f2[N],g[N],n; void doit(int *a,int *f){    memset(g,0,sizeof(g));    int l=1;    g[1]=a[1]; f[1]=1;    for (int i=2;i<=n;i++)    {        if (a[i]>g[l])        {            f[i]=++l;            g[l]=a[i];            continue;        }        int r=lower_bound(g+1,g+1+l,a[i])-g;        f[i]=r;        g[r]=a[i];    }}int main(){    while (scanf("%d",&n)!=EOF)    {        for (int i=1;i<=n;i++)        {            scanf("%d",&a[i]);            b[n-i+1]=a[i];        }        doit(a,f1);        doit(b,f2);        int ans=0;        for (int i=1;i<=n;i++)        {            int d=min(f1[i],f2[n-i+1]);            d*=2; d--;            ans=max(ans,d);        }        printf("%d\n",ans);    }    return 0;}