Cod sursa(job #1497038)

Utilizator akaprosAna Kapros akapros Data 5 octombrie 2015 23:21:05
Problema Euro Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#define maxN 34569
using namespace std;
int n, t, i, j;
long long x, s[maxN], dp[maxN], st, dr, d[maxN];
void right(int i)
{
    while (st <= dr && dp[d[st]] + (s[i] - s[d[st]]) * i <= dp[i - 1] + (s[i] - s[i - 1]) * i)
        -- dr;
    d[++ dr] = i - 1;
}
void read()
{
    freopen("euro.in", "r", stdin);
    scanf("%d %d", &n, &t);
    st = 1; dr = 1;
    for (i = 1; i <= n; ++ i)
    {
        scanf("%lld", &x);
        s[i] = s[i - 1] + x;
        right(i);
        dp[i] = dp[d[st]] + (s[i] - s[d[st]]) * i - t;
    }
}
void write()
{
    freopen("euro.out", "w", stdout);
    printf("%lld", dp[n]);
}
int main()
{
    read();
    write();
    return 0;
}