Cod sursa(job #377740)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 26 decembrie 2009 05:59:04
Problema Secv Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <algorithm>
#include <stdio.h>
#define INF 123456789
#define N 5001
int sir[N];
int map[N],vm;
int is[N];

int cauta(int cine)
{int mij,st=0,dr=vm-1;
 while(st<dr)
 {mij=st+(dr-st)/2;
  if(map[mij]==cine)
  {break;}
  else if(map[mij]<cine)
  {st=mij+1;}
  else
  {dr=mij-1;}
 }
 return (st+(dr-st)/2);
}

int main ()
{int i,j,n,min,c,count,t;
 freopen("secv.in","r",stdin);
 freopen("secv.out","w",stdout);
 scanf("%d",&n);
 for (i=0;i<n;i++)
 {scanf("%d",&sir[i]);
 }
 std::sort(sir,sir+8);
 vm=0;
 t=sir[0];
 map[vm++]=t;
 j=1;
 while(j<n)
 {while(j<n&&sir[j]==t)
  {j++;
  }
  if(j<n)
  {t=sir[j];
   map[vm++]=t;
  }
 }
 count=0;
 j=0;
 min=INF;
 for (i=0;i<n;i++)
 {c=cauta(sir[i]);
  if(is[c]==0)count++;
  is[c]++;
  if(count==vm)
  {while(count==vm)
   {c=cauta(sir[j]);
    if(is[c]==1)
    {count--;}
    is[c]--;
    j++;
   }
   if(i-j+2<min)
   {min=i-j+2;
   }
  }
 }
 printf("%d",min);
 return 0;
}