Pagini recente » Cod sursa (job #1520938) | Cod sursa (job #426997) | Cod sursa (job #1794197) | Cod sursa (job #371540) | Cod sursa (job #344936)
Cod sursa(job #344936)
#include <stdio.h>
#include <values.h>
#define Nmax 5005
#define BIG MAXINT
struct numar{
int pi,ps;
} a[Nmax];
int v[Nmax],p[Nmax];
int n,i,j,min,ok,nr,pi,z;
void sort(int l,int r){
int i,j,xv,xp,y;
i=l; j=r; xv=v[l+(r-l)/2]; xp=p[l+(r-l)/2];
do{
while(v[i]<xv || (v[i]==xv && p[i]<xp)) i++;
while(xv<v[j] || (v[j]==xv && xp<p[j])) j--;
if(i<=j){
y=v[i]; v[i]=v[j]; v[j]=y;
y=p[i]; p[i]=p[j]; p[j]=y;
i++; j--;
}
} while(i<=j);
if(i<r) sort(i,r);
if(l<j) sort(l,j);
}
int main(){
freopen("secv.in","r",stdin);
freopen("secv.out","w",stdout);
scanf("%d",&n);
for(i=1;i<=n;++i) scanf("%d",&v[i]), p[i]=i;
sort(1,n);
v[n+1]=-1;
for(i=2,nr=1,pi=1; i<=n+1; i++)
if(v[i]==v[i-1]) nr++;
else {
++z;
a[z].pi=pi;
a[z].ps=i-1;
pi=i;
nr=1;
}
ok=1; min=BIG;
for(i=1;a[1].pi<=a[1].ps && ok;++a[1].pi){
for(j=2;j<=z && ok;++j){
while(p[a[j].pi]<p[a[j-1].pi] && a[j].pi<=a[j].ps) a[j].pi++;
if( a[j].pi>a[j].ps ) ok=0;
}
if(ok) if( p[a[z].pi]-p[a[i].pi]+1< min)
min=p[a[z].pi]-p[a[i].pi]+1;
}
if(min==BIG) printf("%d\n",-1);
else printf("%d\n",min);
fclose(stdin); fclose(stdout);
return 0;
}