最近做题碰壁了,遇到了一些高级的数据结构,以前从来没有见过用过的,决定对他们一一进行探索
对于区间信息的维护和查询,有两个数据结构比较有用,一个是树状数组,一个是线段树,这篇文章先来介绍一下树状数组。
树状数组
二叉索引树(树状数组)
定义
一个Fenwick树或者说是二叉索引树是一个可以高效地更新数字表中元素和计算前缀和的数据结构。
它可以以O(logn)的时间得到任意前缀和:
∑ i = 1 j A [ i ] , 1 < = j < = N \sum_{i=1}^jA[i],1<=j<=N i=1∑jA[i],1<=j<=N
并同时支持在 O ( l o g n ) O(logn) O(lo