Osmanthus

空想具現化


  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
  •   

© 2024 Homurax

UV: | PV:

Theme Typography by Makito

Proudly published with Hexo

差分数组

发布于 2022-08-17 算法  差分数组 

定义

考虑对于一般数组 $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$ 的一个区间加上一个数,并在最后询问某一位的数。

 上一篇: 为 Hexo 的任何主题添加数学公式(LaTeX)的支持 下一篇: Python 中 Crypto 对 JS 中 CryptoJS AES 加密解密的实现及问题处理 

© 2024 Homurax

UV: | PV:

Theme Typography by Makito

Proudly published with Hexo