Pagini recente » Cod sursa (job #1485492) | Cod sursa (job #1935555) | Cod sursa (job #1980501) | Cod sursa (job #977558) | Cod sursa (job #711188)
Cod sursa(job #711188)
#include <stdio.h>
#include <math.h>
int n, k;
int v[35000], sp[35000], d[35000], poz[35000];
long long sol[35000];
inline long long max (long long a, long long b) {return a > b ? a : b;}
int main ()
{
freopen ("euro.in", "r", stdin);
freopen ("euro.out", "w", stdout);
scanf ("%d %d", &n, &k);
int i, j;
for (i = 1; i <= n; i ++)
scanf ("%d", &v[i]);
d[0] = 1;
for (i = 1; i <= n; i ++)
{
if (d[d[0]] >= 0)
d[d[0]] += v[i];
else
d[++ d[0]] = v[i];
poz[d[0]] = i;
}
for (i = 1; i <= d[0]; i ++)
sp[i] = sp[i - 1] + d[i];
int lim = 2 * sqrt (k);
for (i = 1; i <= d[0]; i ++)
sol[i] = -1000000000000000ll;
for (i = 1; i <= d[0]; i ++)
for (j = max (i - lim, 0); j < i; j ++)
sol[i] = max (sol[i], sol[j] + (sp[i] - sp[j]) * (long long)poz[i] - k);
printf ("%lld\n", sol[d[0]]);
return 0;
}