Cod sursa(job #32685)

Utilizator kyrkDragos Dumitrescu kyrk Data 18 martie 2007 12:45:04
Problema Secv Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<stdio.h>
main()
{
long a[5001],c[5001],d[5000],i,j,k,l,n,m,s,x,sp,valid,inc,fin,avemsol=0;
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
fscanf(stdin,"%ld%ld",&n,&a[1]);
c[1]=a[1];c[0]=1;
for(i=2;i<=n;i++)
{ fscanf(stdin,"%ld",&a[i]);
  valid=0;
  for(j=1;(j<=c[0])&&(valid==0);j++)
   if(a[i]==c[j])valid=1;
  if(valid==0) {  c[0]++; c[c[0]]=a[i];}
}
i=1;
do{
   if(c[i]>c[i+1]){sp=c[i];c[i]=c[i+1];c[i+1]=sp; i-=2; }
   i++;
   if(i<1)i=1;
   }while(i<c[0]);
d[0]=0;
for(i=1;i<=n;i++)
 if(a[i]==c[1]){d[0]++;d[d[0]]=i;}
long xmax=0;
i=1;j=1;
valid=0;
k=1;
do{
   i=d[k];k++;
   j=1;
   do{
      valid=0;
      do{
	 if(a[i]==c[j]){valid=1;fin=i;
			if(j==1)inc=i;
			if(j==c[0])avemsol=1;
		       }
	 i++;
	 }while((i<=n)&&(valid==0));
      j++;
      }while((j<=c[0])&&(d!=0));
   if(avemsol==1) { x=fin-inc;x++;
		    if(x>xmax)xmax=x;
		  }
  }while(k<=d[0]);
if(xmax==0)fprintf(stdout,"%ld",(xmax-1));
else fprintf(stdout,"%ld",xmax);



fclose(stdin);
fclose(stdout);
return 0;
}