Pagini recente » Cod sursa (job #2708421) | Cod sursa (job #1823054) | Cod sursa (job #2393967) | Cod sursa (job #2855272) | Cod sursa (job #1847417)
#include <bits/stdc++.h>
using namespace std;
const int N=5005;
struct Vect{
int poz,val,in;
} v[N];
bool cmp(const Vect &a, const Vect &b){
if(a.val==b.val) return a.poz<b.poz;
return a.val<b.val;
}
int main()
{
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
int i,n,In,Sf,Mij,prev,x;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%d",&v[i].val);
v[i].poz=i;
}
sort(&v[1],&v[n+1],cmp);
v[0].val=-1;
for(i=1;i<=n;i++){
if(v[i].val!=v[i-1].val) prev=v[i-1].val;
if(v[i].val==v[1].val){
v[i].in=v[i].poz;
continue;
}
In=1, Sf=i;
while(In<Sf){
Mij=(In+Sf)/2+1;
if(v[Mij].val>prev) Sf=Mij-1;
if(v[Mij].val<prev) In=Mij+1;
if(v[Mij].val==prev){
if(v[Mij].poz>v[i].poz) Sf=Mij-1;
else{
if(v[Mij].in==0) In=Mij+1;
else In=Mij;
}
}
}
if(v[In].in!=0 and v[In].val==prev and v[In].poz<v[i].poz) v[i].in=v[In].in;
}
int Min=(1<<20);
for(i=n;i>=1;i--){
if(v[i].val!=v[n].val) break;
if(v[i].in!=0){
x=v[i].poz-v[i].in+1;
if(x<Min) Min=x;
}
}
if(Min==(1<<20)) printf("-1\n");
else printf("%d\n",Min);
return 0;
}