树状数组入门 (记录一下
来源:互联网 发布:北大荒网络广播 编辑:程序博客网 时间:2024/06/05 06:23
首先我们要明白
树状数组和线段树很像,但能用树状数组解决的问题,基本上都能用线段树解决,而线段树能解决的树状数组不一定能解决。相比较而言,树状数组
效率要高很多。但使用范围比线段树小(如查询每个区间最小值问题需要线段树)。
树状数组的图解
c1 = a1
c2 = a1 + a2
c3 = a3
c4 = a1 + a2 + a3 + a4
c5 = a5
c6 = a5 + a6
c7 = a7
c8 = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8
对于序列a,我们设一个数组C定义C[i] = a[i – 2^k + 1] + … + a[i],k为i在二进制下末尾0的个数
树状数组的代码量非常短 核心三个函数 只有10行左右 但是很不好理解 博主也没有理解所以在这里记录一下
三个核心函数
求2^k
int lowbit(int x) { return x&(-x); }
将a[p]上加一个值x(如果减去取-x即可,即更新C数组
void update(int p, int x){ while(p <= n) { c[p] += x; p += lowbit(p); }}
求前p项的和
int sum(int p){ int sum = 0; while(p > 0) { sum += c[p]; p -= lowbit(p); }}
0 0
- 树状数组入门 (记录一下
- 树状数组 入门
- poj2352树状数组入门
- 树状数组入门
- 树状数组入门
- 树状数组简单入门
- 树状数组入门理解
- 树状数组知识入门
- 树状数组入门
- 树状数组入门
- 树状数组入门笔记
- poj2299 树状数组入门题
- HDU-1541(树状数组入门)
- HDU-1166(树状数组入门)
- hdu1166(树状数组入门)
- poj 2352 树状数组入门
- hdu1166之树状数组入门
- Ural1028(树状数组入门)
- MyEclipse10搭建Strust2开发环境
- 新起点,新开始
- 使用Strust2框架写HelloWorld
- Xcode编程问题集锦
- MyEclipse使用总结——MyEclipse10安装SVN插件
- 树状数组入门 (记录一下
- 会被社会淘汰的8种人
- Maven学习总结(一)——Maven入门
- 一个控件用肉眼看不见,有哪些可能
- 五大查找
- 网上地址
- button形式的四四方方的cell(有分割线)
- Stopwatch的使用
- .Net高级技术——程序集