Pagini recente » Cod sursa (job #720206) | Cod sursa (job #2957876) | Cod sursa (job #563805) | Cod sursa (job #2969428) | Cod sursa (job #1789005)
#include <iostream>
#include <cstdio>
#define MAXN 34600
#define RAD 195
#define inf (1LL<<62)
using namespace std;
int n, t, a[MAXN], nq;
long long val[MAXN], pos[MAXN], prev[MAXN], sum[MAXN], din[MAXN];
void prepare()
{
nq = 1;
for (int i = 1; i <= n; i++)
{
val[nq] += a[i];
if (val[nq] < 0 && i != n)
pos[nq++] = i;
}
pos[nq] = n;
n = nq;
for (int i = 1; i <= n; i++)
sum[i] = sum[i-1] + val[i];
}
void solve()
{
for (int i = 1; i <= n; i++) {
din[i] = -inf;
for (int j = i-1; j >= 0 && i-j <= RAD; j--)
din[i] = max(din[i], din[j] + (sum[i]-sum[j])*pos[i] - t);
}
printf("%d", din[n]);
}
int main()
{
freopen("euro.in", "r", stdin);
freopen("euro.out", "w", stdout);
scanf("%d %d", &n, &t);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
prepare();
solve();
return 0;
}