所谓的树状数组其实是线段树的一种特殊情况。只有题目具有加减性质才能用树状数组。如果要在区间内最大最小值的就不能用了。所以能用树状数组解得一定可以用线段树,可以用线段树的不一定可以用树状数组。
然而树状数组具有的有点也是很明显的。虽然他和线段树修改和求和的复杂度都是logN。但是树状数组的常数更小,需要的空间也更少。而且最重要的是他就像并查集一样优美,一样的容易编写。
百度文库上有介绍数组数组的ppt:http://wenku.baidu.com/view/0f08c5db6f1aff00bed51e1f.html
研究完上面的ppt也应该基本明白了。
lowbit函数其实就是n二进制位末尾第一位为1加上后面0所成的数。
例如: lowbit( 110 ) = 10 ... lowbit( 11 ) = 1 ... lowbit( 1000 ) = 1000
而他所表示的意义就是n所表示的区间长度。
tyvj上的p1324。
题目大意就是给一个数列。每次询问[a,b]的和,且会把A[(a+b)/2]置0。
本文介绍了树状数组的基本概念及其与线段树的区别。重点讲解了树状数组的应用场景,特别是在处理区间加减操作的问题上。通过实例代码展示了树状数组的实现过程,并强调了其相较于线段树在常数因子和空间使用上的优势。
1388

被折叠的 条评论
为什么被折叠?



