Cod sursa(job #1960396)

Utilizator radu.leonardoThe Doctor radu.leonardo Data 10 aprilie 2017 13:30:09
Problema Euro Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <bits/stdc++.h>
int t;
FILE*f=freopen("euro.in", "r", stdin);
FILE*g=freopen("euro.out","w",stdout);

struct val{

    int val, pos, back;
    long long max;

} e[34567];

int ne;
void read_in()
{
    int i, n, a[34567];
    scanf("%d%d", &n, &t);

    for(i = 0; i < n; i++)
        scanf("%d", a + i);

    for(i = 0; i < n - 1; i++)
    {
        e[ne].val += a[i];
        if(e[ne].val < 0)
            e[ne++].pos = i + 1;
    }
    e[ne].val += a[n - 1];
    e[ne++].pos = n;
}

int main()
{
    int i, j, totsum, parsum, back;
    long long max;
    read_in();
    totsum = e->val;
    e->back = 0;
    e->max = (long long) totsum * e->pos - t;

    for(i = 1; i < ne; i++)
    {
        totsum += e[i].val;
        max = (long long) totsum * e[i].pos;
        back = 0;
        parsum = e[i].val;

        for(j = i - 1; (j >= e[i - 1].back) && (i - j <= 200); j--)
        {
            if((long long) parsum * e[i].pos + e[j].max > max)
            {
                max = (long long) parsum * e[i].pos + e[j].max;
                back = j;
            }
            parsum += e[j].val;
        }
        e[i].back = back;
        e[i].max = max - t;
    }


    printf("%Ldn", e[ne - 1].max);
}