Pagini recente » Cod sursa (job #2189078) | Cod sursa (job #400089) | Cod sursa (job #1394417) | Cod sursa (job #814871) | Cod sursa (job #22604)
Cod sursa(job #22604)
#include <stdio.h>
#define M 5005
int a[M], b[M];
int n, i, j, v[M], s[M], ns, x;
void sort (int l, int r);
int main () {
freopen ("secv.in", "r", stdin);
freopen ("secv.out", "w", stdout);
scanf ("%d", &n);
for (i=0;i<n;i++) { scanf ("%d", &v[i]); a[i]=v[i]; }
sort (0, n-1);
a[n]=-1;
ns=0;
for (i=0;i<n;i++) { if (a[i]!=a[i+1]) { s[ns]=a[i]; ns++; } a[i]=0; }
if (a[1]==s[0]) a[1]=1;
for (i=1;i<n;i++) {
if (v[i]==s[0])
a[i]=1;
else {
for (j=1;j<=ns && s[j]!=v[i];j++);
x=s[j-1];
for (j=i-1;j>0 && v[j]!=x;j--);
if (a[j]>0) a[i]=i-j+a[j]; } }
x=10000;
for (i=0;i<n;i++) if (s[ns-1]==v[i] && x>a[i]) x=a[i];
if (x==10000) x=-1;
printf ("%d\n", x);
return 0;
}
void sort(int l, int r) {
int c, i, j, k;
if (l==r) return;
c=(l+r)/2;
sort(l, c);
sort(c+1, r);
i=l; j=c+1; k=l;
while (i<=c && j<=r)
if (a[i]<a[j])
b[k++]=a[i++];
else
b[k++]=a[j++];
while (i<=c) b[k++]=a[i++];
while (j<=r) b[k++]=a[j++];
for (k=l; k<=r; k++) a[k]=b[k]; }