Pagini recente » Cod sursa (job #1355438) | Cod sursa (job #26080) | Cod sursa (job #2860624) | Cod sursa (job #2744318) | Cod sursa (job #368381)
Cod sursa(job #368381)
#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;
}