Pagini recente » Cod sursa (job #223199) | Cod sursa (job #2659312) | Cod sursa (job #1619754) | Cod sursa (job #2974626) | Cod sursa (job #89767)
Cod sursa(job #89767)
#include<stdio.h>
const int maxn = 40000;
long long c[maxn];
long long dq[maxn];
long long i;
long long st;
long long t;
long long sp[maxn];
long long din[maxn];
long long n;
long long sum(long long i,long long j)
{
return sp[i] - sp[j - 1];
}
long long better(long long poz1,long long poz2)
{
return sum(poz2,poz1 + 1) * i < din[poz2] - din[poz1];
}
int main()
{
freopen("euro.in","r",stdin);
freopen("euro.out","w",stdout);
scanf("%lld %lld",&n,&t);
for(i = 1;i <= n; ++i)
{
scanf("%lld",&c[i]);
sp[i] = sp[i - 1] + c[i];
}
st = 1;
dq[0] = 1;
for(i = 1;i <= n; ++i)
{
while(better(dq[st],dq[st + 1]) && st < dq[0])
{
++st;
}
din[i] = din[dq[st]] + sum(i,dq[st] + 1) * i - t;
while( better(dq[dq[0]],i) && dq[0] >= st)
{
dq[0]--;
}
dq[0]++;
dq[dq[0]] = i;
}
printf("%lld\n",din[n]);
return 0;
}