Cod sursa(job #291892)

Utilizator klamathixMihai Calancea klamathix Data 30 martie 2009 15:40:22
Problema Secv Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#include<stdio.h>
#include<algorithm>
//#include<vector>
//#include<stdlib.h>

#define MAXN 5001


int i, j, k ,maxs, N ,v[MAXN], aux[MAXN], distincte[MAXN], mark, maxlength, start, mins = MAXN +1;

int
intcmp(const void *va, const void *vb)
{
	return *(int*)va - *(int*)vb;
}



int main()
{
    FILE*in=fopen("secv.in","r");
    FILE*out=fopen("secv.out","w");
    
    fscanf(in,"%d",&N);
    
    for( i = 1 ; i <= N ; i ++)
    {
         fscanf(in,"%d",&v[i]);
         aux[i] = v[i];
         if(v[i] > maxs) maxs = v[i];
    }
    
    qsort(aux,N,sizeof(aux[0]),intcmp);
    
    distincte[0] = -1;
    
    for( i = N ; i >= 1; i--)
    {
        // fprintf(out,"%d\n",aux[i]);
         if(aux[i] != distincte[k])
         distincte[++k] = aux[i];
    }
    
  //  for( i = 1; i <= k ;i++)
   // fprintf(out,"%d\n",distincte[i]);
    
    maxlength = k;
    
    for( i = N ; i >= 1 ; i--)
    {
         if(v[i] == maxs)
         {
                 start = i;
                 k = 1;
                 
                 for( j = start ; j >=1 ; j--)
                 {
                     // fprintf(out,"%d\n",k);
                      if(v[j] == distincte[k+1])
                      {
                              k = k + 1;
                              if( k == maxlength)
                              {
                                  if( start - j + 1 < mins) mins = start - j + 1;
                                  j = 0 ;
                              }
                      }
                 }
         }
    }
    if(mins == MAXN +1) mins = -1;
    fprintf(out,"%d\n",mins);
    
    
    return 0;
}