P1471 推导
P1471 推导
我们可以设
\[\begin{aligned}
sum1[n] &= a[1] + a[2] + \cdots + a[n] \\
sum2[n] &= a[1]^2 + a[2]^2 + \cdots + a[n]^2
\end{aligned}
\]
那么我们就可以表示出方差了
方差公式展开:
\[\begin{aligned}
& \frac{\sum_{i=1}^n (a[i]-\bar{a})^2}{n} \\
=\ & \frac{(a[1]-\bar{a})^2+(a[2]-\bar{a})^2+\cdots+(a[n]-\bar{a})^2}{n} \\
=\ & \frac{a[1]^2+a[2]^2+\cdots+a[n]^2 - 2\bar{a}(a[1]+a[2]+\cdots+a[n]) + n\bar{a}^2}{n} \\
=\ & \frac{a[1]^2+a[2]^2+\cdots+a[n]^2}{n} - \frac{2\bar{a}(a[1]+a[2]+\cdots+a[n])}{n} + \bar{a}^2 \\
=\ & \frac{a[1]^2+a[2]^2+\cdots+a[n]^2}{n} - 2\bar{a}^2 + \bar{a}^2 \\
=\ & \frac{a[1]^2+a[2]^2+\cdots+a[n]^2}{n} - \bar{a}^2 \\
=\ & \frac{sum2[n]}{n} - \bar{a}^2
\end{aligned}
\]
至于修改也很简单了
区间加展开:
\[\begin{aligned}
& \sum_{i=1}^n (a[i] + x)^2 \\
=\ & (a[1] + x)^2 + (a[2] + x)^2 + \cdots + (a[n] + x)^2 \\
=\ & a[1]^2 + a[2]^2 + \cdots + a[n]^2 + 2x(a[1] + a[2] + \cdots + a[n]) + nx^2 \\
=\ & sum2[n] + 2x \cdot sum1[n] + nx^2
\end{aligned}
\]
于是就可以用带 lazy 的线段树来解决
* 注意:优先级应该是要先处理 sum2,再处理 sum1

浙公网安备 33010602011771号