Cod sursa(job #989730)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 26 august 2013 13:09:19
Problema Secv Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<cstdio>
#include<cstring>
int a[5001],i,j,k,m,n,b[5001],s,p[5001],l[5001],f,h,t,d[5001],o,e=5001,g,u[5001];
int main()
{
    freopen("secv.in","r",stdin),
    freopen("secv.out","w",stdout),
    scanf("%d",&n);
    for(f=i=1;i<=n;i++)
          scanf("%d",a+i),d[i]=-1,p[i]=5001;
    while(1)
    {
          if(f>=n)
               break;
          memset(l,0,sizeof(l));
          for(l[n]=1,i=n-1;i>=f;i--)
          {
               for(m=0,j=i+1;j<=n;j++)
               if(l[j]>m&&a[j]>a[i])
                    m=l[j];
               l[i]=m+1;
          }
          m=l[f],t=f;
          for(i=f+1;i<=n;i++)
          if(l[i]>m)
               m=l[i],t=i;
          o=0,b[++o]=t;
          for(i=t+1;i<=n;i++)
          if(a[i]>a[b[o]]&&l[i]==m-1)
               b[++o]=i,m--;
          for(s=f;s<=b[o];s++)
          for(j=1;j<=o;j++)
          if(a[s]==a[b[j]])
               d[s]=j;
          for(j=b[o];j>f&&d[j]>d[j-1];j--);
          for(s=j;s<=b[o];s++)
               p[s]=b[o]-s+1;
          for(s=f;s<j;s++)
          {
               for(h=0,k=1;k<=o&&b[k]<s;k++);
               for(t=s;t<b[o]&&!h;t++)
               if(d[t]<d[b[k]])
                     h=1;
               p[s]=!h?(b[o]-s+1):5001;
          }
          for(e=5001,j=f;j<=b[o]&&p[j]!=5001;j++)
          if(p[j]<e)
               e=p[j];
          u[++g]=e,f=b[o]+1;
    }
    for(e=u[1],i=2;i<=g;i++)
    if(e<u[i])
          e=u[i];
    printf("%d",e);
}