树状数组是十分的优雅的结构,用于解决区间求和,单点修改,树状数组和线段树很相似 ,线段树的使用范围更广,树状数组虽然可用的范围比线段树小但是它的效率比线段树高
下面就是树状数组的基本图形,首先要说明的是树状数组是个一维的数组 ,树状数组的下标是从1开始的 而不是从0开始的,我们只是利用了它的下标值的特点,来进行区间的求和,单点修改。
1 红色标注的是现在 树状数组的下标
2 每个红色标注的上方的方格内代表着树状数组能表示原来的数组( 就是要求和,修改单点的数组 )
比如 红色下标 2 上方的 (1,2) 表示了他代表的是原来数组从 a[1] 一直到a[2]的和 (假设原来的数组为 a[8])
再比如 红色下标3 上方的 (3) , 就表示他代表的是原来数组 a[3] (只有一个就不用再说求和了。。。)
看下面这个表格 ,要注意的是 树状数组巧妙地利用了 二进制数的特点 。
这个图和上边的 图是相互对应的 ,观察到一下的特点
1 . 节点下标和第四列的 最后一个元素是一样的 (就是树状数组的一个节点 所表示的范围的最后一个元素)。
2. 节点对应的元素个数是