Pagini recente » Cod sursa (job #692987) | Cod sursa (job #1472676) | Cod sursa (job #1277431) | Cod sursa (job #1954034) | Cod sursa (job #245563)
Cod sursa(job #245563)
#include<stdio.h>
int v[1000000];
int rq(int p,int q)
{
int returned=0,i,change,e=0;
do
{
change=0;
for(i=p;i<=q;++i)
{
if(v[i]-1>=0)
{
--v[i];
change=1;
e=0;
if(!v[i]&&i==p)
{++p;e=1;}
if(!v[i]&&i==q)
{--q;e=1;}
}
if(!v[i])
{
change=1;
if(!e)
{
returned+=rq(p,i-1)+rq(i+1,q)-1;
p=q+1;
break;
}
}
}
if(change)
returned++;
}
while(p<=q);
return returned;
}
int main()
{
long long sum=0;
int n,max,entr=0,p,q;
freopen("operatii.in","r",stdin);
freopen("operatii.out","w",stdout);
scanf("%d",&n);
int put=1;
for(int i=0;i<n;++i)
{
scanf("%d",v+i);
entr=0;
if(v[i])
p=i;
while(v[i]&&i!=n)
{
if(!entr)
entr=1;
++i;
scanf("%d",v+i);
}
if(entr)
{
q=i-1;
sum+=rq(p,q);
}
}
printf("%d",sum);
return 0;
}