Cod sursa(job #2540459)

Utilizator ardutgamerAndrei Bancila ardutgamer Data 7 februarie 2020 10:26:20
Problema Operatii Scor 0
Compilator cpp-64 Status done
Runda irim_eralumis Marime 1.26 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#include <climits>

using namespace std;

int v[1000005];
int k = 0;
int dif[1000005];

int main()
{
    freopen("operatii.in","r",stdin);
    freopen("operatii.out","w",stdout);
    int n , x , ma = 0;
    long long sum = 0;
    scanf("%d",&n);
    for(int i = 1 ; i <= n ; i++)
    {
        scanf("%d",&x);
        if(k == 0)
        {
            v[++k] = x;
            continue;
        }
        if(v[k] != x)
            v[++k] = x;
    }
    int pos = -1;
    int mi = INT_MAX;
    for(int i = 1 ; i <= k ; i++)
    {
        if(v[i] == 0)
        {
            if(mi != INT_MAX && pos != -1)
            {
                dif[pos]+=mi;
                dif[i]-=mi;
                sum += mi;
            }
            pos = -1;
            mi = INT_MAX;
        }
        else
        {
            if(pos == -1)
                pos = i;
            mi = min(mi,v[i]);
        }
    }
    if(mi != INT_MAX && pos != -1)
        {
            dif[pos]+=mi;
            sum += mi;
        }
    for(int i = 1 ; i <= k ; i++)
        dif[i] += dif[i-1];
    for(int i = 1 ; i <= k ; i++)
        sum += 1ll*(v[i]-dif[i]);
    printf("%lld\n",sum);
    return 0;
}