Cod sursa(job #185164)

Utilizator me_andyAvramescu Andrei me_andy Data 24 aprilie 2008 20:34:49
Problema Secv Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream.h>

 ifstream f("secv.in");
 ofstream g("secv.out");
 int a[5001],pr[5001],n,l,j,x,ok,i,min=0,prs[5001],cont,k,oki=0;
int divide(int p,int q)
{
 int st=p,dr=q,x=pr[p];
 while(st<dr)
 {
  while(st<dr && pr[dr]>=x) dr--;
  pr[st]=pr[dr];
  while(st<dr && pr[st]<=x) st++;
  pr[dr]=pr[st];
 }
 pr[st]=x;
 return st;

}
void qsort(int p,int q)
{
 int m=divide(p,q);
 if(m-1>p) qsort(p,m-1);
 if(m+1<q) qsort(m+1,q);
}

int main()
{
 f>>x;
 l=0;
 for(i=1;i<=x;i++)
 {ok=0;
  f>>a[i];
  for(j=1;j<=l;j++)
   if(a[i]==pr[j])
    { ok=1; break;}
   if(ok==0)
   pr[++l]=a[i];
 }
 qsort(1,l);
 min=x;
 for(i=1;i<=x;i++)
 {
  for(j=1;j<=l;j++)
  { prs[j]=0;cont=l;}
  if(a[i]==pr[1])
   {
   k=i+1;
    j=2;
    prs[1]=1;
    cont--;
   while(cont>0&&k<=x)
   {
    if(pr[j]==a[k])
    {  if(prs[j]==0)
       {prs[j++]=1;cont--;}}
    else k++;
   }
  if(k-i-1<=min && cont==0) if((k-i)==1) min=k-i;
  else { min=k-i+1;oki=1;}
  }
 }
 if(min==x && oki==0)
 g<<-1;
 else g<<min;
 return 0;
}