#include<bits/stdc++.h>
#define ll long long
#define ma 50005
using namespace std;
ll n,L,c[ma],a[ma],b[ma];
double f[ma];
ll q[ma],l,r;
inline ll read()
{
ll x=0;char c=getchar();
for(;!isdigit(c);c=getchar());
for(; isdigit(c);c=getchar())x=(x<<3)+(x<<1)+c-'0';
return x;
}
double _mck_(ll x,ll y)
{
return (f[x]+b[x]*b[x]-f[y]-b[y]*b[y])/(b[x]-b[y]);
}
int main()
{
register int i;
int j,x;
n=read();L=read();
for(i=1;i<=n;i++){
c[i]=read();
c[i]+=c[i-1];
a[i]=c[i]+i;b[i]=c[i]+i+L+1;
}b[0]=L+1;
//for(i=1;i<=n;i++)printf("%lld ",b[i]);
for(i=1;i<=n;i++){
while(l<r&&_mck_(q[l+1],q[l])<=2*a[i])l++;
j=q[l];
//printf("第%d %d %lld %lld\n",i,j,a[i],b[j]);
f[i]=f[j]+a[i]*a[i]+b[j]*b[j]-2*a[i]*b[j];
while(l<r&&_mck_(q[r],q[r-1])>=_mck_(i,q[r]))r--;
q[++r]=i;
}//printf("\n");
//for(i=1;i<=n;i++)printf("%lld ",(ll)f[i]);
printf("%lld",(ll)f[n]);
}
测试数据下下来本地过了(输出和答案一样),可洛谷评测就不过