树状数组学习
2012-08-06 11:53
190 查看
树状数组使用实际的静态数组,模拟树的形状。
下面是树状数组的构成:
树状数组结点直接的关系:
子->父关系:
c1 -> c2 -> c4 -> c8(由二进制可知:1, 10, 100, 1000)
c3 -> c4 -> c8(二进制:11,100,1000)
c5 -> c6 -> c8(二进制:101,110,1000)
c7 -> c8(二进制:111 -> 1000)
父 = 子 + lowbit(子)
父->子关系:
cn = (n ——(n - lowbit(n)+ 1 );
两种运算:
1.更改值
dif = after - init = 更新值- 初始值
复杂度O(logn)
2.询问和
例如:
sum[6] = c[6] + c[4];
110 = 10 + 100;
复杂度O(logn)
下面是树状数组的构成:
树状数组结点直接的关系:
子->父关系:
c1 -> c2 -> c4 -> c8(由二进制可知:1, 10, 100, 1000)
c3 -> c4 -> c8(二进制:11,100,1000)
c5 -> c6 -> c8(二进制:101,110,1000)
c7 -> c8(二进制:111 -> 1000)
父 = 子 + lowbit(子)
父->子关系:
cn = (n ——(n - lowbit(n)+ 1 );
两种运算:
1.更改值
dif = after - init = 更新值- 初始值
while(i <= n){ c[i] += val; i += lowbit(i); }
复杂度O(logn)
2.询问和
例如:
sum[6] = c[6] + c[4];
110 = 10 + 100;
while(i > 0){ sum += c[i]; i -= lowbit[i]; }
复杂度O(logn)
相关文章推荐
- 树状数组的学习小结
- 【算法系列学习】线段树vs树状数组 单点修改,区间查询 [kuangbin带你飞]专题七 线段树 A - 敌兵布阵
- 学习笔记 BIT(树状数组)
- ACM学习历程—HDU4417 Super Mario(树状数组 && 离线)
- 学习笔记 BIT(树状数组)
- 树状数组学习总结
- [算法学习] 线段树,树状数组,数堆,笛卡尔树
- 树状数组学习小结
- 树状数组学习心得
- 树状数组学习笔记
- 树状数组学习以及题目总结
- 树状数组学习总结
- 树状数组学习心得
- [学习笔记] 树状数组区间加+区间求和
- ACM学习历程—HDU5700 区间交(树状数组 && 前缀和 && 排序)
- 树状数组学习笔记
- hdu 5249区间第k大(学习了下树状数组的搞法)
- 学习笔记:树状数组
- 学习笔记:树状数组
- ACM学习历程—51NOD 1685 第K大区间2(二分 && 树状数组 && 中位数)