Cod sursa(job #368381)

Utilizator nicolaetitus12Nicolae Titus nicolaetitus12 Data 24 noiembrie 2009 19:48:04
Problema Secv Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define INF 123456789
#define N 5001
int sir[N],sir2[N],count[N];

void sort(int left,int right)
{int l=left,r=right,p=sir[left+rand()%(right-left+1)],aux;

 while(l<r)
 {while(sir[l]<p)l++;
  while(sir[r]>p)r--;
  if(l<=r)
  {aux=sir[l];
   sir[l]=sir[r];
   sir[r]=aux;
   l++;
   r--;
  }
 }
 
 if(l<right)
 {sort(l,right);}

 if(left<r)
 {sort(left,r);}
}

int main ()
{int n,i,max,j,vf,min;
 freopen("secv.in","r",stdin);
 freopen("secv.out","w",stdout);
 scanf("%d",&n);
 for (i=0;i<n;i++)scanf("%d",&sir2[i]),sir[i]=sir2[i];
 
 sort(0,n-1);

 for (vf=1,i=1;i<n;i++)
 {if(sir[vf-1]!=sir[i])
  {sir[vf]=sir[i];
   vf++;
  }
 }
 
 for (j=0;j<n;j++)
 {if(sir2[j]==sir[0])
  {count[j]=j;}
  else
  count[j]=-1;
 }
 
 for (i=1;i<vf;i++)
 {for (j=0,max=-1;j<n;j++)
  {if(sir2[j]==sir[i-1])
   {max=j;
   }
   else if(sir2[j]==sir[i])
   {if(max!=-1)
    {count[j]=count[max];
    }
   }
  }
 }
 
 for (i=0,min=INF;i<n;i++)
 {if(sir2[i]==sir[vf-1]&&i-count[i]<min)
  {min=i-count[i];
  }
 }

 printf("%d",min+1);

 
 return 0;
}