![](https://i-blog.csdnimg.cn/blog_migrate/1373e6d038bb8246977778b5fa51654b.jpeg)
树状数组,数组a是原数组,下面是他们的一些关系
数组C就是
C1=a1
C2=a1+a2
C3=a3
C4=a1+a2+a3+a4
C5=a5
……
C8=a1+a2+a3+a4+a5+a6+a7+a8
……
C2^n=a1+a2+….+a2^n
那么树状数组具体怎么定义的呢?思考上面的规律,不难得出结论:
对于序列a,我们设一个数组C定义C[i] = a[i – 2^k + 1] + … + a[i],k为i在二进制下末尾0的个数。
这个C就是树状数组。
2^K的计算很简单:x & -x(网上还有其他版本,如2^k=x and (x xor (x-1)) ,但这个是最简单的了,如果位运算不太理解,记下来就行了)