Pagini recente » Cod sursa (job #2961133) | Cod sursa (job #1533566) | Cod sursa (job #3183364) | Cod sursa (job #571791) | Cod sursa (job #123051)
Cod sursa(job #123051)
#include <stdio.h>
FILE *f=fopen("operatii.in","r"), *g=fopen("operatii.out","w");
long v[1000002];
int main()
{
long op=0,t,tt,n,i,min,max;
int p=1,ord,k,s,o;
fscanf(f,"%ld",&n);
for (i=1;i<=n;++i)
fscanf(f,"%ld",&v[i]);
t=0;
tt=0;
while (p)
{
i=tt+1;
if (o) i=1;
t=0;
tt=0;
k=1;
o=0;
while ((k)&&(i<=n))
{
if ((v[i]>0)&&(!t)) {
t=i;
}
if ((v[i]==0)&&(t)) {
tt=i-1;
}
if ((t)&&(tt)) k=0;
++i;
}
if ((t)&&(i==n+1)&&(tt==0)) tt=n;
if (t>0)
{
min=v[t];
max=v[t];
if (v[t]>v[t+1]) ord=1;
if (v[t]<v[t+1]) ord=0;
s=1;
for (i=t+1;i<=tt;++i)
{
if (v[i]<min) min=v[i];
if (v[i]>max) max=v[i];
if ((v[i]>v[i+1])&&(ord==0)&&(i<tt)) s=0;
if ((v[i]<v[i+1])&&(ord==1)&&(i<tt)) s=0;
}
if (s)
{
for (i=t;i<=tt;i++)
v[i]=0;
op+=max;
}
else
{
op+=min;
for (i=t;i<=tt;++i)
{
v[i]-=min;
if ((v[i]>0)&&(v[i-1]==0)&&(v[i+1]==min))
{
op+=v[i];
v[i]=0;
}
else o=1;
}
}
}
if (t==0) p=0;
}
fprintf(g,"%ld\n",op);
return 0;
}