0pts 过了样例
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,k,su[100007],dp[100007];
int q[100007],l=1,r=0;
__int128 X(int j){
return su[j];
}
__int128 Y(int j){
return dp[j]+(su[j]+k)*(su[j]+k);
}
signed main(){
scanf("%lld%lld",&n,&k);
k++;
for(int i=1;i<=n;su[i]+=su[i-1]+1,i++){
scanf("%lld",&su[i]);
}
q[++r]=0;
for(int i=1;i<=n;i++){
while(l<r&&Y(q[l+1])-Y(q[l])<(X(q[l+1])-X(q[l]))*2*su[i]) ++l;
int j=q[l];
dp[i]=dp[j]+(su[i]-su[j]-k)*(su[i]-su[j]-k);
while(l<r&&(Y(q[r])-Y(q[r-1]))*(X(i)-X(q[r-1]))>=(Y(i)-Y(q[r-1]))*(X(q[r])-Y(q[r-1]))) --r;
q[++r]=i;
}
printf("%lld\n",dp[n]);
return 0;
}