Cod sursa(job #945458)

Utilizator mitrutstrutMitrea Andrei Ionut mitrutstrut Data 1 mai 2013 22:31:19
Problema Secv Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#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; 
}