Pagini recente » Cod sursa (job #489220) | Cod sursa (job #239101) | Cod sursa (job #589379) | Cod sursa (job #1246700) | Cod sursa (job #23476)
Cod sursa(job #23476)
#include <stdio.h>
#define N_MAX 5001
int n,m,t[N_MAX],p[N_MAX];
long v[N_MAX],c[N_MAX];
void citire(){
int bun;
FILE *fin=fopen("secv.in","r");
fscanf(fin,"%d",&n);
for (int i=1;i<=n;i++){
fscanf(fin,"%ld",&v[i]);
bun=1;
for (int j=1;j<=m;j++)
if (c[j]==v[i])
bun=0;
if (bun)
c[++m]=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 (c[k1]<c[k2])
b[++k]=c[k1++];
else
b[++k]=c[k2++];
while (k1<=m)
b[++k]=c[k1++];
while (k2<=y)
b[++k]=c[k2++];
for (k1=1;k1<=k;k1++)
c[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(){
sortare(1,m);
long x=1;
int j;
for (int i=1;i<=n;i++)
for (j=1;j<=x;j++)
if (v[i]==c[j]){
p[j]=i;
if (j==1)
t[j]=1;
else
t[j]=t[j-1]+p[j]-p[j-1];
if (j==x){
x++;
break;
}
}
}
void afisare(){
FILE *fout=fopen("secv.out","w");
if (!t[m])
fprintf(fout,"-1\n");
else
fprintf(fout,"%d\n",t[m]);
fclose(fout);
}
int main(){
citire();
prelucrare();
afisare();
return 0;
}