【学习笔记】树状数组

发布时间 2024-01-09 21:29:16作者: public_sickle

树状数组支持两种操作:

  1. 单点修改
  2. 区间求和

如果我们使用普通数组,这两种操作的时间复杂度分别为 \(O(1)\)\(O(n)\)。虽然修改的时间复杂度很低,但是求和操作在数据量很大的情况下就会很耗时。如果我们使用前缀和,那么区间求和的时间复杂度就会降为 \(O(1)\),而单点修改会影响到后面的和,时间复杂度升为 \(O(n)\)。现在我们需要找到一种方法,可以使这两种操作都不那么慢。因此,我们使用了树状数组。


我们使用一个数组 \(C\) 存放若干个小区间。单点修改时,只更新包含此元素的区间;区间求和时,将区间进行组合即可。
树状数组就是这样一种结构。它巧妙地利用了二进制。

单点修改

【留个坑,下次有时间再填】