Cod sursa(job #2921872)

Utilizator Iordache_CezarIordache Cezar Iordache_Cezar Data 2 septembrie 2022 10:15:37
Problema Euro Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <bits/stdc++.h>
#define NMAX 34580
#define ll long long int

using namespace std;
ifstream fin ("euro.in");
ofstream fout ("euro.out");

ll n, t, v[NMAX], dp[NMAX], total;

void calculez_minim();

int main()
{
    fin >> n >> t;
    for (ll i = 1; i <= n; i++)
        fin >> v[i];
    for (ll st = 1, dr = n; st < dr; st++, dr--)
        swap(v[st], v[dr]);

    for (ll i = 1; i <= n; i++)
        v[i] = v[i-1] + v[i];

    calculez_minim();
    ll left = 1;
    ll nr = n;
    ll dif = 0;
    while (nr)
    {
        ll poz = dp[left];
        total = total + (v[poz]-dif) * nr - t;
        left = poz+1;
        nr = n - left+1;
        dif = v[poz];
    }
    fout << total;
    return 0;
}

void calculez_minim()
{
    dp[n] = n;
    for (ll i = n-1; i >= 1; i--)
        if (v[i] > v[dp[i+1]])
            dp[i] = i;
        else
            dp[i] = dp[i+1];
}