Cod sursa(job #3201448)

Utilizator thinkphpAdrian Statescu thinkphp Data 8 februarie 2024 11:27:04
Problema Euro Scor 100
Compilator cpp-64 Status done
Runda Lista lui wefgef Marime 1.04 kb
#include <stdio.h>

#define MAXN 35000

typedef long long llong;

const int SQRT = 380;

int N, T, P, A[MAXN], S[MAXN], end[MAXN];
llong best[MAXN];

void solve(void)
{
    int i, j, sum;
    llong aux, r;

    for(i = 1, sum = 0; i < N; i++)
    {
        sum += A[i];
        if(sum < 0)
            S[++P] = sum, end[P] = i, sum = 0;
    }
    sum += A[N], S[++P] = sum, end[P] = N;

    for(i = 1; i <= P; i++)
    {
        r = (llong)S[i]*end[i]+best[i-1], sum = S[i];
        
        for(j = i-1; j >= i-SQRT && j >= 1; j--)
        {
            sum += S[j];
            aux = (llong)sum*end[i]+best[j-1];
            if(aux > r)
                r = aux;
        }
        best[i] = r-(llong)T;
    }
}

void read_data(void)
{
    int i;

    scanf("%d %d\n", &N, &T);

    for(i = 1; i <= N; i++)
        scanf("%d ", &A[i]);
}


void write_data(void)
{
    printf("%lld\n", best[P]);
}

int main(void)
{
    freopen("euro.in", "rt", stdin);
    freopen("euro.out", "wt", stdout);

    read_data();
    solve();
    write_data();
    
    return 0;
}