树状数组就是记录某一序列的前缀和的数组,
不同情况下数组的下标可能不同,例如单纯的统计
序列1~n前缀和的话,在1~n范围上维护树状数组,
而对于像求逆序对或者统计序列中 某一段内 共有多
少个数 这样的题目,则需要在序列数值范围上维护
树状数组。
树状数组最基本的操作是区间查询和单点增加。
由此可拓展出来的题型有 单点查询数值+区间增加、区间增加+区间查询数组和。
对于区间增加,
暴力方法:
一个一个位置做单点增加。
优化:
处理方法是在维护树状数组时对应的首位置加上数值,
在尾部减去数值。 这样对树状数组查询时得到的1~x前缀和
即原数组对应位置的增加量。
区间查询:
思路sum【j】-sum【i-1】,同时当增加操作为区间增加时,
因为树状数组维护的是 单个元素 的数值的变化情况,所以不好统
计相应和,不过容易想到当前的区间和,就等于 区间内每一个元
素的数值增量+初始的区间和。然后,,,推导出一个式子,,,,
最后,我们可以将答案分为两个部分,然后分别维护两个树状数组
即可。