Pagini recente » Cod sursa (job #350341) | Cod sursa (job #2421062) | Cod sursa (job #521181) | Cod sursa (job #2095539) | Cod sursa (job #945457)
Cod sursa(job #945457)
#include <stdio.h>
#include <stdlib.h>
#define M 5005
int sort_function( const void *a, const void *b) {
if (*(int *)a < *(int *)b) return -1;
if (*(int *)a > *(int *)b) return 1;
return 0; }
int n, ndist, i, j, vect[M], dist[M], pos[M], din[M];
int main () {
freopen ("secv.in", "r", stdin);
freopen ("secv.out", "w", stdout);
scanf ("%d", &n);
for (i=0;i<n;i++) { scanf ("%d", &vect[i]); pos[i]=vect[i]; }
qsort ((void *)pos, n, sizeof(dist[0]), sort_function);
pos[n]=-1;
ndist=1;
dist[0]=pos[0];
for (i=1;i<n-1;i++)
if (pos[i]!=pos[i+1])
dist[ndist++]=pos[i+1];
for (i=0;i<n;i++) din[i]=-1;
for (i=0;i<ndist;i++) pos[i]=-1;
for (i=0;i<n;i++) {
if (vect[i]==dist[0]) {
pos[0]=i;
din[i]=1; }
else {
for (j=1;j<ndist && dist[j]!=vect[i];j++);
if (pos[j-1]!=-1) {
pos[j]=i;
din[i]=i-pos[j-1]+din[pos[j-1]];
}
} }
j=10000;
for (i=0;i<n;i++)
if (vect[i]==dist[ndist-1] && j>din[i] && din[i]!=-1)
j=din[i];
if (j==10000)
printf ("-1\n");
else
printf ("%d\n", j);
return 0;