Pagini recente » Cod sursa (job #3342274) | Cod sursa (job #3312786) | Cod sursa (job #3338261) | Cod sursa (job #3340991) | Cod sursa (job #3309302)
#include <fstream>
#include <stdio.h>
using namespace std;
//ifstream cin("operatii.in");
ofstream cout("operatii.out");
int A[1000001];
long long s=0;
long long nrOp(int st, int dr)
{
if(st<=dr)
{
int nmin=1e6;
for(int i=st;i<=dr;i++)
{
if(nmin>A[i]) nmin=A[i];
// cout<<A[i]<<" ";
}
//cout<<endl;
for(int i=st;i<=dr;i++) A[i]-=nmin;
// for(int i=st;i<=dr;i++) cout<<A[i]<< " ";
// cout<<endl;
long long s=nmin,l=0;
for(int i=st;i<=dr;i++)
if(A[i]!=0)
l++;
else
s+=nrOp(i-l,i-1), l=0;
if(l>0)
s+=nrOp(dr-l+1,dr);
return s;
}
return 0;
}
int main()
{
int n;
FILE *fd = fopen("operatii.in","r");
fscanf(fd,"%d",&n);
int l=0;
for(int i=1;i<=n;i++)
{
fscanf(fd,"%d",&A[i]);
}
/*for(int i=1;i<=n;i++)
{
cout<<A[i]<<" ";
}*/
//cout<<endl;
for(int i=1;i<=n;i++)
if(A[i]==0)
s=s+nrOp(i-l,i-1),l=0;
else l++;
s=s+nrOp(n-l+1,n);
cout<<s;
return 0;
}