#include <cstdio>
#include <cstring>
#include <algorithm>
#define File(_) freopen(#_".in", "r", stdin);freopen(#_".out", "w", stdout)
#define Debug(_) freopen(#_".in", "r", stdin);freopen("debug.out", "w", stdout)
#define fo(i, a, b) for (int i = a; i <= b; ++i)
#define fd(i, a, b) for (int i = a; i >= b; --i)
#define fe(i, u) for (int i = head[u]; i; i = edge[i].next)
#define N 50010
#define mod
#define inf 0x3f3f3f3f
#define db double
#define ll long long
#define gc getchar()
#define init(a, b) memset(a, b, sizeof a)
using namespace std;
db c[N], a[N], b[N], sum[N], f[N];
int d[N];
db calc(int i, int j)
{
return (f[i] + b[i] * b[i] - f[j] - b[j] * b[j]) * 1.0 / ((b[i] - b[j]) * 1.0);
}
signed main()
{
int n, l;
scanf("%d%d", &n, &l);
fo (i, 1, n)
{
scanf("%lf", &c[i]);
sum[i] = sum[i - 1] + c[i];
}
fo (i, 0, n)
{
a[i] = sum[i] + i;
b[i] = a[i] + l + 1;
}
int h = 1, t = 1;
fo (i, 1, n)
{
while (h < t && calc(d[h], d[h + 1]) < 2 * a[i])
++h;
f[i] = f[d[h]] + (a[i] - b[d[h]]) * (a[i] - b[d[h]]);
while (h < t && calc(i, d[t - 1]) < calc(d[t - 1], d[t]))
--t;
d[++t] = i;
}
printf("%lld", (ll)f[n]);
return 0;
}
连交了好几遍都是CE,也没有错误信息,本地编译能过,有没有dalao能说明一下原因qaq