树状数组(Binary Indexed Tree(BIT), Fenwick Tree)是一个查询和修改复杂度都为log(n)的数据结构。主要用于查询任意两位之间的所有元素之和,但是每次只能修改一个元素的值;经过简单修改可以在log(n)的复杂度下进行范围修改,但是这时只能查询其中一个元素的值。
对于
10个数1到10,关于树状数组的建立:
x           x*(-x)lowbit           第三行对应的x前lowbit位的之和 
 1            1           1 
 2            2            3 
 3            1           3 
 4            4           10 
 5            1           5 
 6           2           11 
 7            1            7 
 8            8           36 
 9            1             9 
 10          2           19
构建树状数组
void add(int x,int num){//构建数组
while(x<=n){
c[x]+=num;
x += x&(-x);
}
}
查询树状数组
int query(int x){//统计前x的和是多少
int ans = 0;
while(x>0){
ans+=c[x];
x-= x&(-x);
}
return ans;
}
                










