我们想要快速求数组中下标为 x ~ y 的数的和,大家第一时间都会想到用前缀和,时间复杂度为O(1)
但如果说要在线对数组进行修改的话,那用修改前缀和数组就会用O(n)的复杂度,对于q次询问,时间复杂度为O(qn),速度极不理想
这是我们就可以使用树状数组来维护
树状数组支持单点修改,单点查询,区间修改,区间查询等操作
首先我们要知道:
树状数组有一个很关键的东西,叫做lowbit,
lowbit是将一个二进制数的所有高位一都去掉,只留下最低位的1,
比如lowbit(5)=lowbit(0101(二进制))=0001(二进制)
我们看看树状数组对应的位置及其lowbit
我们会发现,树状数组上的8号位(100