题意
给一个长度为 n n n的序列a,每次询问若修改某一个位置,要求找一个长度同样为 n n n的单调不降序列b,最小化 ∑ i = 1 n ( a i − b i ) 2 \sum_{i=1}^n(a_i-b_i)^2 ∑i=1n(ai−bi)2。
n , m ≤ 1 0 5 n,m\le10^5 n,m≤105
分析
首先如果我们只选一个数 x x x满足 ∑ ( a i − x ) 2 \sum(a_i-x)^2 ∑(ai−x)2最小,展开后发现这是一个关于 x x x的二次函数,显然当 x = ∑ a i n x=\frac{\sum{a_i}}{n} x=n∑ai时取最优。
那么答案一定是将序列a分成若干部分,每部分的最优解都取这部分的平均数。
如果没有修改,可以逐个把元素插入单调栈中,若栈顶的平均值小于下一个部分的平均值,则把这两个部分合并。
有一个结论是从前往后和从后