Pagini recente » Cod sursa (job #2768615) | Cod sursa (job #3259153)
#include <iostream>
#include <stack>
using namespace std;
int v[1000001],n,i;
stack<int>stk;
struct stdr{
int st,dr;
}bothways[1000001];
int main()
{
cin>>n;
for(i=1;i<=n;i++)
{
cin>>v[i];
}
for(i=1;i<=n;i++)
{
while(!stk.empty()&&v[stk.top()]>=v[i])
stk.pop();
if(!stk.empty())
bothways[i].st = stk.top();
stk.push(i);
}
for(i=n;i>=1;i--)
{
while(!stk.empty()&&v[stk.top()]>=v[i])
stk.pop();
if(!stk.empty())
bothways[i].dr = stk.top();
else
bothways[i].dr = n+1;
stk.push(i);
}
int sumfin=0;
for(i=1;i<=n;i++)
{
if(v[i] == 0)
continue;
sumfin += v[i] - v[bothways[i].dr];
int nouind = bothways[i].dr;
sumfin += v[bothways[nouind].st];
}
cout<<sumfin;
return 0;
}