所谓的树状数组其实是线段树的一种特殊情况。只有题目具有加减性质才能用树状数组。如果要在区间内最大最小值的就不能用了。所以能用树状数组解得一定可以用线段树,可以用线段树的不一定可以用树状数组。
然而树状数组具有的有点也是很明显的。虽然他和线段树修改和求和的复杂度都是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。