Pagini recente » Cod sursa (job #908979) | Cod sursa (job #310028) | Cod sursa (job #867568) | Cod sursa (job #2733091) | Cod sursa (job #89766)
Cod sursa(job #89766)
#include<stdio.h>
const int maxn = 40000;
int c[maxn];
int dq[maxn];
int i;
int st;
int t;
int sp[maxn];
int din[maxn];
int n;
int sum(int i,int j)
{
return sp[i] - sp[j - 1];
}
int better(int poz1,int poz2)
{
return sum(poz2,poz1 + 1) * i < din[poz2] - din[poz1];
}
int main()
{
freopen("euro.in","r",stdin);
freopen("euro.out","w",stdout);
scanf("%d %d",&n,&t);
for(i = 1;i <= n; ++i)
{
scanf("%d",&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("%d\n",din[n]);
return 0;
}