树状数组/差分数组/线段树/莫队算法介绍
1 树状数组介绍
功能
提供动态区间查询,即区间查询,单点修改,时间复杂度均为O(log n)
原理
树状数组
核心知识说明
-
lowbit计算
lowbit(x) 表示x 将最右边为1的二进制所表示的数字(最低有效位),比如:6(110)的lowbit(5) = 2(10),计算方法如下
-
假设tr为一个数组,长度要比实际元素个数大1,第一位不用,tr[x] 表示 nums[x - lowbit(x) + 1] + … nums[x]之和,即:
-
根据x如何计算其左兄弟位置(左兄弟表示同一个父节点下其左边的一个兄弟,用于计算前缀和)即:
-
根据x如何计算父节点,(单点更新的时候需要,往上更新所有的父节点)