Pagini recente » Cod sursa (job #1726609) | Romanian IOI Medalists: Careers | Cod sursa (job #1290627) | Cod sursa (job #105339) | Cod sursa (job #64591)
Cod sursa(job #64591)
#include<stdio.h>
const long long maxn = 60000;
long long i;
long long n;
long long k;
long long a[maxn];
long long din[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((sump[i] - sump[st[l - 1]]) * i + sol[st[l - 1]] - k > (sump[i] - sump[st[l]]) * i + sol[st[l]] - k && l > 0)
{
--l;
}
sol[i] = (sump[i] - sump[st[l]]) * i + sol[st[l]] - k;
sum = 0;
++l;
st[l] = i;
}
}
printf("%lld\n",sol[n]);
return 0;
}