Cod sursa(job #1988297)

Utilizator retrogradLucian Bicsi retrograd Data 2 iunie 2017 16:46:10
Problema Euro Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include <vector>
#include <iostream>
#include <queue>
#include <set>
#include <cassert>
#include <limits>
#include <algorithm>
#include <map>

using namespace std;
 

int main() {
    freopen("euro.in", "r", stdin);
    freopen("euro.out", "w", stdout);
    
    int n, t;
    cin >> n >> t;

    vector<long long> gain(n + 1);
    for (int i = 1; i <= n; ++i) {
        cin >> gain[i];
        gain[i] += gain[i - 1];
    }

    map<int, long long> funs;
    long long ans = 0;

    for (int i = 1; i <= n; ++i) {
        long long best = 0;
        for (auto p : funs) {
            best = max(best, p.first * i + p.second);
        }

        ans = gain[i] * i - t + best;
        if (funs.count(-gain[i]))
            funs[-gain[i]] = min(funs[-gain[i]], ans);
        else funs[-gain[i]] = ans;
    }

    cout << ans << endl;
    return 0;
}