Pagini recente » Monitorul de evaluare | Cod sursa (job #2812959) | Cod sursa (job #343704) | Cod sursa (job #164546) | Cod sursa (job #377740)
Cod sursa(job #377740)
#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;
}