Cod sursa(job #626283)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 26 octombrie 2011 19:01:25
Problema Secv Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<stdio.h>
#define N 5001
long a[N],b[N],p[N],i,j,k,m,n,l,t,r[N],x; 
int main()
{freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
scanf("%ld",&n);
for(i=1;i<=n;i++)
       scanf("%ld",&a[i]);
p[n]=t=1;
for(k=n-1;k;k--)
       {for(x=0,i=k+1;i<=n;i++)
       if(a[i]>=a[k]&&p[i]>x)
              x=p[i];
       p[k]=1+x;}
x=p[1];
for(k=2;k<=n;k++)
if(p[k]>=x)
       x=p[k],t=k;
b[m++]=t;
for(i=t+1;i<=n;i++)
if(a[i]>a[t]&&p[i]==x-1)
       x--,b[m++]=i;
for(i=b[0];i<b[m-1];i++)
       {for(t=j=0;j<m;j++)
       if(a[i]!=a[b[j]])
              t++;
       if(t==m)
              r[++l]=i;}
if(l)
       printf("%ld",(r[1]-b[0]<b[m-1]-r[l])?(b[m-1]-r[l]):(r[1]-b[0]));
else
       printf("%ld",b[m-1]-b[0]+1);
return 0;}