定义
考虑对于一般数组 $nums$,有差分数组 $diff$。
$diff$ 定义如下:
$$
diff[i] =
\begin{cases}
nums[i] - nums[i - 1] & i \in [1, n] \\
nums[i] & i = 0
\end{cases}
$$
性质
$nums[i]$ 的值是 $diff[i]$ 的前缀和:
$$
nums[i] = \sum_{i=0}^n diff[i]
$$
diff[0] = nums[0]
diff[1] = nums[1] - nums[0]
diff[2] = nums[2] - nums[1]
...
diff[n] = nums[n] - nums[n - 1]
计算 $nums[i]$ 的前缀和:
$$
\sum_{i=0}^n nums[i] = \sum_{i=0}^n \sum_{j=0}^i diff[j] = \sum_{i}^n (n - i + 1) diff[i]
$$
nums[0] = diff[0]
nums[1] = diff[0] + diff[1]
nums[2] = diff[0] + diff[1] + diff[2]
...
nums[i] = diff[0] + diff[i] + ... + diff[i]
实践
如果要对 $nums$ 在区间 $[L, R]$ 内的数均加上 $v$,只需要 $diff[l]$ += $v$,$diff[r + 1]$ -= $v$ 。
可以维护多次对 $nums$ 的一个区间加上一个数,并在最后询问某一位的数。