Cod sursa(job #239484)
Utilizator | Data | 4 ianuarie 2009 21:13:17 | |
---|---|---|---|
Problema | Operatii | Scor | 10 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.63 kb |
#include<stdio.h>
int main ()
{
freopen ("operatii.in","r",stdin);
freopen ("operatii.out","w",stdout);
int n,i,k;
scanf("%d",&n);
long a[n],b[n],min=100000000,max=0,x=0,o,l;
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
if(a[i]<min)
min=a[i];
if(a[i]>max)
max=a[i];
b[i]=a[i];
}
b[0]=a[0]=max;
b[n+1]=a[n+1]=max;
int exista=1,e2=1;
while(exista)
{//min=max;
e2=1;
// printf("%d %d\n",min,max);
exista=0;
for(i=1;i<=n;i++)
{if(a[i]!=max)
{exista=1;
if(b[i]==min)
{k=i;
e2=0;
while(a[k]==min)
k++;
if(a[k]>a[i-1])
{ x+=a[i-1]-a[i];
for(o=i;o<k;o++)
b[o]=a[i-1];
}
else
{
x+=a[k]-a[i];
for(o=i;o<k;o++)
b[o]=a[k];
}
i=k;
}
}}
for(i=1;i<=n;i++)
a[i]=b[i];
if(e2==1)
{ min=a[1];
for(i=1;i<=n;i++)
if(min>a[i])
min=a[i];}
}
printf("%d\n",x);
return 0;
}