Pagini recente » Cod sursa (job #2519228) | Cod sursa (job #2615682) | Cod sursa (job #2223075) | Cod sursa (job #557797) | Cod sursa (job #115118)
Cod sursa(job #115118)
#include<stdio.h>
#include<values.h>
long nrop,n,k,nmax,nmin,max,min,c;
long v[1000002];
void read()
{
scanf("%ld",&n);
long i;
i=0;
while (i<=n)
{scanf("%ld",&v[++i]);
if (v[i])
k++;
}
}
void secv(long inc,long sf)
{
long i;
if (c!=2)
{
nrop+=max;
k=k-(sf-inc+1);
i=inc;
while (i<=sf)
{v[i]=0;
i++;
}
}
else {
nrop+=min;
k-=nmin;
i=inc;
while (i<=sf)
{v[i]-=min;
i++;
}
}
}
void rez()
{
min=MAXLONG;
max=0;
nmin=0;
nmax=0;
long i,j,inc;
while (k)
{i=1;
c=0;
while (i<=n)
{
if (v[i] && v[i+1])
{if (max==0)
inc=i;
if (min>v[i])
{min=v[i];
nmin=1;
}
else if (min==v[i])
nmin++;
if (max<v[i])
{max=v[i];
nmax=1;
}
else if (max==v[i])
nmax++;
if (c!=2)
if (c==0)
{
if (v[i]<v[i+1] && v[i+1])
c=-1;
else if (v[i]>v[i+1] && v[i+1])
c=1;
}
else if (c==1)
{if (v[i]<v[i+1] && v[i+1])
c=2;
}
else if (c==-1)
{if (v[i]>v[i+1] && v[i+1])
c=2;
}
}
else { if (v[i])
{
if (max==0)
inc=i;
if (min>v[i])
{min=v[i];
nmin=1;
}
else if (min==v[i])
nmin++;
if (max<v[i])
{max=v[i];
nmax=1;
}
else if (max==v[i])
nmax++;
secv(inc,i);
c=0;
nmax=nmin=0;
max=0;
min=MAXLONG;}
}
i++;
}
}
}
void af()
{
printf("%ld",nrop);
}
int main()
{
freopen("operatii.in","r",stdin);
freopen("operatii.out","w",stdout);
read();
rez();
af();
fcloseall();
return 0;
}