Pagini recente » Cod sursa (job #1376910) | Cod sursa (job #3169454) | Cod sursa (job #1835801) | Cod sursa (job #2508669) | Cod sursa (job #55369)
Cod sursa(job #55369)
#include <stdio.h>
#define MAX_N 34567
#define FIN "euro.in"
#define FOUT "euro.out"
int N, n, T, t, A[MAX_N], S[MAX_N], D[MAX_N];
long long bst[MAX_N];
int main(void)
{
int i, j, s, ts;
long long x;
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
scanf("%d %d", &N, &T);
for (i = 0; i < N; i++)
scanf("%d", A+i);
for (s = i = 0; i+1 < N; i++)
if ((s += A[i]) < 0)
{
S[n] = s;
D[n++] = i+1;
s = 0;
}
S[n] = s + A[N-1]; D[n++] = N;
for (t = 1; t * t < T; t++); t <<= 1;
bst[0] = (long long) S[0] * (long long) D[0]-T, ts = S[0];
for (i = 1; i < n; i++)
{
bst[i] = (long long) (ts += S[i]) * (long long) D[i]-T;
for (s = S[i], j = i-1; j >= 0 && j > i-t; j--)
{
x = bst[j] + (long long) s * (long long) D[i]-T;
if (bst[i] < x) bst[i] = x;
s += S[j];
}
}
printf("%lld\n", bst[n - 1]);
return 0;
}