var
a:array[1..20004] of int64;
i,n,l,j:longint;
m,ans,t:int64;
f:array[1..20004,1..2] of int64;
function min(x,y:int64):int64;
begin
if x>y then min:=y
else min:=x;
end;
begin
readln(n,m);
for i:=1 to n do
begin
read(a[i]);
a[n+i]:=a[i];
end;
t:=0;
ans:=1000000000000;
for l:=1 to n do
begin
for i:=1 to 2*n+1 do
for j:=1 to 2 do
f[i,j]:=0;
for i:=2 to n+1 do
begin
inc(t);
if t>4000000 then
begin
writeln(ans);
halt;
end;
if a[i+l-2]<a[i+l-1] then
begin
f[i+l-1,1]:=min(f[i+l-2,1]+a[i+l-1]-a[i+l-2],f[i+l-2,2]+m+a[i+l-1]-a[i+l-2]);
f[i+l-1,2]:=min(f[i+l-2,1]+m+sqr(a[i+l-1]-a[i+l-2]),f[i+l-2,2]+sqr(a[i+l-1]-a[i+l-2]));
end
else
begin
f[i+l-1,2]:=min(f[i+l-2,2]+a[i+l-2]-a[i+l-1],f[i+l-2,1]+m+a[i+l-2]-a[i+l-1]);
f[i+l-1,1]:=min(f[i+l-2,2]+m+sqr(a[i+l-1]-a[i+l-2]),f[i+l-2,1]+sqr(a[i+l-1]-a[i+l-2]));
end;
end;
if ans>min(f[n+l,1],f[n+l,2]) then ans:=min(f[n+l,1],f[n+l,2]);
end;
writeln(ans);
end.
for j:=1 to 2 do
f[i,j]:=0;
可以直接写为 fillchar(f,sizeof(f),0);