Cod sursa(job #1988318)

Utilizator retrogradLucian Bicsi retrograd Data 2 iunie 2017 17:43:03
Problema Euro Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 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]] = max(funs[-gain[i]], ans);
        else funs[-gain[i]] = ans;

        cerr << i << ": " << ans << endl;
    }
 
    cout << ans << endl;
    return 0;
}