文章目录

洛谷 P2221 高速公路 做题笔记

发布于

题意

给你一个长度为 $n$ 的链,链上的每条边有边权。
有 $m$ 次操作,对于每次操作:

  1. C l r v,表示将 $l$ 到 $r$ 之间的所有边的边权都加上 $v$。
  2. Q l r 表示在 $l$ 到 $r$ 上随机选两个不同的点,从 $a$ 到 $b$ 的路径上边权和期望是多少。

$1 \leq n, m \leq 10^5, -10^4 \leq v \leq 10^4$

题解

考虑从 $i$ 到 $i + 1$ 的这条边对答案的贡献,我们需要在 $i$ 的左边和 $i + 1$ 的右边分别选一个点,所以答案就是
$$\sum\limits_{i = l}^ra_i \times\left(i - l + 1\right) \times \left(r - i\right)$$
展开后整理可得
$$\left(r - lr\right) \times \sum\limits_{i = l}^ra_i + \left(r + l - 1\right) \times \sum\limits_{i = l}^ri \times a_i - \sum\limits_{i = l}^ri^2 \times a_i$$
使用线段树维护 $\sum\limits_{i = l}^ra_i$、$\sum\limits_{i = l}^ri \times a_i$、$\sum\limits_{i = l}^ri^2 \times a_i$ 即可。


对于修改:
$$\sum\limits_{i = l}^r\left(a_i + v\right) = v(r - l + 1) + \sum\limits_{i = l}^ra_i$$

$$\sum\limits_{i = l}^ri \times\left(a_i + v\right) = v \times \sum\limits_{i = l}^ri + \sum\limits_{i = l}^ri \times a_i$$

用等差数列求和公式算

$$\sum\limits_{i = l}^ri^2 \times\left(a_i + v\right) = v \times \sum\limits_{i = l}^ri^2 + \sum\limits_{i = l}^ri^2 \times a_i$$

用平方和公式算


因为是期望,所以答案要除以 $\binom{r - l + 1}2$

代码


暂无评论

发表评论