0
点赞
收藏
分享

微信扫一扫

树状数组基础


树状数组(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;
}


举报

相关推荐

0 条评论