```
while(head<tail&&getUp(p-1,q[head],q[head+1])>=2*sum[i]*getdown(q[head],q[head+1])) head++;
int j=q[head];
dp[p][i]=dp[p-1][j]+(sum[j]-sum[i])*(sum[j]-sum[i]);
while(head<tail&&getUp(p-1,q[tail-1],q[tail])*getdown(q[tail],i)>=getUp(p-1,q[tail],i)*getdown(q[tail-1],q[tail])) tail--;
q[++tail]=i;
```
by hgzx__lc @ 2023-12-31 14:41:27