
区间查询->前缀和->树结构维护(log_2(n))
(x-lowbit(x)+1) ->若无子结点是自身,若有子结点是最底层第一个子结点
单点修改、区间查询:t[x]初始化为add(x,a[x])返回的和,只修改t[x]不修改a[x]
+lowbit(x) -> 父结点,上一层的(连续)前缀和
-lowbit(x) ->上一层的(不连续)前缀和
-lowbit(x)+1 -> 若无子结点是自身,若有子结点是最底层第一个子结点
ask():每次抹尾部最后一个1,直到0位置【不包含0位置】
add():每次在尾部最后一个1上再+1,直到根结点为止
![]()
区间修改、单点查询: t[x]初始化为0,维护时t[x]存储add(x,a[x])返回的前后增量和
区间修改、区间查询
b[x]的前缀和 -> a[x]的增量
b[1~x]前缀和的和 -> a[x]前缀和的增量
树状数组的扩展应用
树状数组拓展到二维:
模板题代码:
DataStructure/树状数组.md at main · RanFeng2/DataStructure · GitHub
参考:
本文深入讲解了树状数组的基本概念及应用,包括前缀和、单点修改与区间查询等核心操作,并探讨了树状数组在区间修改、区间查询场景下的高效实现方式,最后介绍了树状数组的二维扩展应用。












b[x]的前缀和 -> a[x]的增量
b[1~x]前缀和的和 -> a[x]前缀和的增量





被折叠的 条评论
为什么被折叠?



