Cod sursa(job #3259153)

Utilizator vladsoartavlad sofronea vladsoarta Data 25 noiembrie 2024 12:14:35
Problema Operatii Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.93 kb
#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;
}