Cod sursa(job #283579)

Utilizator free2infiltrateNezbeda Harald free2infiltrate Data 19 martie 2009 13:30:09
Problema Operatii Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.64 kb
#include <stdio.h>

int A[1000001];

int min(int x,int y)
{
if (x<y) return x;
return y;
}

int main()
{
freopen("operatii.in","r",stdin);
freopen("operatii.out","w",stdout);

int n,i,p,steps=0,r=1,k,j;
scanf("%d",&n);
for (i=1;i<=n;i++) scanf("%d",&A[i]);

do
{
p=0;
for (i=r;i<=n;i++) if (A[i]>p) p = A[i];

if (p)
for (i=r;i<=n;i++)
if (A[i]==p) {
                j = i;
                while (A[j]==p) j++;
                k = min(p-A[i-1],p-A[j]);
                steps += k;
                for (;i<j;i++) A[i]-=k;
             }
while (A[n]==0) n--;
while (A[r]==0) r++;
} while (p);
printf("%d",steps);
}