Pagini recente » Cod sursa (job #2619143) | Cod sursa (job #1379800) | Cod sursa (job #371357) | Cod sursa (job #1913026) | Cod sursa (job #24556)
Cod sursa(job #24556)
#include <stdio.h>
#define N_MAX 5001
int n,m,d[N_MAX],ap[N_MAX];
long v[N_MAX],s[N_MAX];
void citire(){
FILE *fin=fopen("secv.in","r");
fscanf(fin,"%d",&n);
for (int i=1;i<=n;i++)
fscanf(fin,"%ld",&v[i]);
fclose(fin);
}
void interclasare(int x,int m,int y){
long b[N_MAX],k1=x,k2=m+1,k=0;
while (k1<=m&&k2<=y)
if (s[k1]<s[k2])
b[++k]=s[k1++];
else
b[++k]=s[k2++];
while (k1<=m)
b[++k]=s[k1++];
while (k2<=y)
b[++k]=s[k2++];
for (k1=1;k1<=k;k1++)
s[x+k1-1]=b[k1];
}
void sortare(int x,int y){
if (x!=y){
int m=(x+y)/2;
sortare(x,m);
sortare(m+1,y);
interclasare(x,m,y);
}
}
void prelucrare(){
int i,j;
for (i=1;i<=n;i++)
s[i]=v[i];
sortare(1,n);
m=1;
for (i=2;i<=n;i++)
if (s[i]!=s[m])
s[++m]=s[i];
for (i=1;i<=n;i++){
for (j=1;j<=m;j++)
if (s[j]==v[i])
break;
if (j==1){
d[i]=1;
ap[j]=i;
}
else
if (ap[j-1]){
d[i]=d[ap[j-1]]+i-ap[j-1];
ap[j]=i;
}
}
}
void afisare(){
FILE *fout=fopen("secv.out","w");
int min=N_MAX;
if (!ap[m])
fprintf(fout,"-1\n");
else{
for (int i=1;i<=n;i++)
if ((v[i]==s[m])&&(min>d[i]))
min=d[i];
fprintf(fout,"%d\n",min);
}
fclose(fout);
}
int main(){
citire();
prelucrare();
afisare();
return 0;
}