Cod sursa(job #3221170)

Utilizator marinaluca2008Marina Luca Stefan marinaluca2008 Data 6 aprilie 2024 10:34:20
Problema Euro Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <bits/stdc++.h>

#pragma GCC optimize ("O4")
#pragma GCC optimize ("fast-math")
#pragma GCC optimize ("unroll-loops")

using namespace std;
//#define int long long
#define ll long long
//#define pb push_back
//#define mp make_pair
// using ll = long long
// typedef long long ll
//
#define cin fin
#define cout fout

ifstream cin ("euro.in");
ofstream cout ("euro.out");

int n, t;
#define NMAX  35000
const int VMAX = 380;
int k;
int v[NMAX], sp[NMAX], poz[NMAX];
ll rez[NMAX];
void solve (void){
    int sum, i, j;
    ll gigi, rip;
    for (i = 1, sum = 0; i < n; ++ i){
        sum += v[i];
        if (sum < 0){
            sp[++ k] = sum;
            poz[k] = i;
            sum = 0;
        }
    }
    sum += v[n], sp[++ k] = sum;
    poz[k] = n;
    for ( i = 1; i <= k; ++ i){
        gigi = (ll)sp[i] * poz[i] + rez[i - 1];
        sum = sp[i];
        for (int j = i - 1; j >= i - VMAX  && j >= 1; -- j){
            sum += sp[j];
            rip = (ll)sum * poz[i] + rez[j - 1];
            if (rip > gigi)
                gigi = rip;
        }
        rez[i] = gigi - (ll)t;
    }
}
void read(void){
    cin >> n >> t;
    for (int i = 1; i <= n; ++ i){
        cin >> v[i];
    }
}

void afis (void){
    cout << rez[k];
}

signed main (void){
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    read();
    solve();
    afis();
    return 0 ^ 0;
}