Pagini recente » Cod sursa (job #2339208) | Cod sursa (job #785903) | Cod sursa (job #521365) | Cod sursa (job #101417) | Cod sursa (job #64595)
Cod sursa(job #64595)
#include<stdio.h>
const long long maxn = 60050;
long long i;
long long n;
long long k;
long long a[maxn];
long long max(long long i,long long j)
{
return i > j ? i : j;
}
long long st[maxn];
long long m;
long long t;
long long sump[maxn];
long long l;
long long j;
long long sol[maxn];
long long sum;
int main()
{
freopen("euro.in","r",stdin);
freopen("euro.out","w",stdout);
scanf("%lld %lld",&n,&k);
for(i = 1;i <= n; ++i)
{
scanf("%lld",&a[i]);
sump[i] = sump[i - 1] + a[i];
}
for(i = 1;i <= n; ++i)
{
sum += a[i];
if (sum < 0 || i == n)
{
while((long long)(sump[i] - sump[st[l - 1]]) * i + sol[st[l - 1]] - k > (long long)(sump[i] - sump[st[l]]) * i + sol[st[l]] - k && l > 0)
{
--l;
}
sol[i] = (long long)(sump[i] - sump[st[l]]) * i + sol[st[l]] - k;
sum = 0;
++l;
st[l] = i;
}
}
printf("%lld\n",sol[n]);
return 0;
}