Pagini recente » Cod sursa (job #2389054) | Cod sursa (job #1518854) | Cod sursa (job #1230724) | Cod sursa (job #593007) | Cod sursa (job #3201448)
#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;
}