Cod sursa(job #3221160)

Utilizator marinaluca2008Marina Luca Stefan marinaluca2008 Data 6 aprilie 2024 10:22:37
Problema Euro Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.38 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;
const int NMAX = 35e3;
const int VMAX = 35e2;
int k;
int v[NMAX + 1], sp[NMAX + 1], poz[NMAX + 1];
int rez[NMAX + 1];
void solve (void){
    int sum, i, gigi, maxi = 0;
    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 (int i = 1; i <= k; ++ i){
        gigi = sp[i] * poz[i] + rez[i - 1];
        sum = sp[i];
        for (int j = i - 1; j >= i - VMAX  && j >= 1; -- j){
            sum += v[j];
            int rip = sum * poz[i] + rez[j - 1];
            if (maxi > rip)
                maxi = rip;
        }
        rez[i] = gigi - (int)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;
}