与线段树的区别
**1.**两者在复杂度上同级, 但是树状数组的常数明显优于线段树, 其编程复杂度也远小于线段树.
**2.**树状数组的作用被线段树完全涵盖, 凡是可以使用树状数组解决的问题, 使用线段树一定可以解决, 但是线段树能够解决的问题树状数组未必能够解决.
**3.**树状数组的突出特点是其编程的极端简洁性, 使用lowbit技术可以在很短的几步操作中完成树状数组的核心操作,其代码效率远高于线段树。

lowbit
lowbit(x) —— 取出x的最低位1
1 | int lowbit(x){return x&(-x);} |
单点更新
1 | void update(int x,int y,int n){ |
区间查询
单点更新的逆操作
1 | int getsum(int x){ |