Cod sursa(job #22609)

Utilizator Spike7d5Spike7d5 Spike7d5 Data 26 februarie 2007 21:59:55
Problema Secv Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#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] && a[i]>0) 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]; }