Pagini recente » Cod sursa (job #1754338) | Cod sursa (job #413014) | Cod sursa (job #2677905) | Cod sursa (job #2912310) | Cod sursa (job #1960397)
#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);
}