Pagini recente » Istoria paginii runda/cluj.love.icrisop/clasament | Cod sursa (job #2043840) | Cod sursa (job #1761784) | Cod sursa (job #504709) | Cod sursa (job #124840)
Cod sursa(job #124840)
#include <stdio.h>
#include <stdlib.h>
#define INF 5001
struct element{
int val,p;
}s2[5001];
int N,k,a[5001],v[5001],poz[5001],s[5001],loc[5001];
int compare(const void *a, const void *b){
element *x=(element *) a;
element *y=(element *) b;
return ( (x->val)-(y->val));
}
void citire(){
int i;
FILE *fin=fopen("secv.in","r");
fscanf(fin,"%d",&N);
for (i=1;i<=N;i++){
fscanf(fin,"%d",&s[i]);
s2[i].val=s[i];
s2[i].p=i;
}
fclose(fin);
}
void prelucrare(){
int i;
qsort(s2,N+1,sizeof(element),compare);
for (i=1;i<=N;i++){
if (s2[i].val!=s2[i-1].val){
a[++k]=s2[i].val;
v[k]=INF;
poz[k]=INF;
}
loc[s2[i].p]=k;
}
for (i=1;i<=N;i++)
if (loc[i]==1){
v[1]=1;
poz[1]=i;
}
else
if (v[loc[i]-1]!=INF)
if (loc[i]==k){
if (v[loc[i]-1]+i-poz[loc[i]-1]<v[loc[i]])
v[loc[i]]=v[loc[i]-1]+i-poz[loc[i]-1];
}
else{
poz[loc[i]]=i;
v[loc[i]]=v[loc[i]-1]+i-poz[loc[i]-1];
}
}
void afisare(){
FILE *fout=fopen("secv.out","w");
fprintf(fout,"%d\n",v[k]);
fclose(fout);
}
int main(){
citire();
prelucrare();
afisare();
return 0;
}