Pagini recente » Cod sursa (job #327502) | Cod sursa (job #2421042) | Cod sursa (job #345952) | Cod sursa (job #2542273) | Cod sursa (job #368388)
Cod sursa(job #368388)
#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&&count[i]!=-1)
{min=i-count[i];
}
}
// for (i=0;i<n;i++) {printf("%d ",count[i]);}
// if(min==INF) printf("-1");
//else
printf("\n%d",min+1);
return 0;
}