Sorting 用Fenwick树计算子数组和
我有一个问题,我不知道我是否能用一棵芬威克树来解决它。 问题是: 我有一个原始数组a=[8,4,7,0]。现在我遍历数组,在每一步我都对排序的子数组感兴趣,它看起来像:[8],[4,8],[4,7,8],[0,4,7,8]。在迭代的每一步,当我插入当前的数字时,我想知道比我刚才插入的数字大的所有数字的总和。因此,对于上面的示例,它将如下所示:Sorting 用Fenwick树计算子数组和,sorting,data-structures,segment-tree,fenwick-tree,array-sum,Sorting,Data Structures,Segment Tree,Fenwick Tree,Array Sum,我有一个问题,我不知道我是否能用一棵芬威克树来解决它。 问题是: 我有一个原始数组a=[8,4,7,0]。现在我遍历数组,在每一步我都对排序的子数组感兴趣,它看起来像:[8],[4,8],[4,7,8],[0,4,7,8]。在迭代的每一步,当我插入当前的数字时,我想知道比我刚才插入的数字大的所有数字的总和。因此,对于上面的示例,它将如下所示: [8] );sum=0,因为大于插入数字(8)的所有数字之和为0 [4,8];sum=8,因为大于插入数字(4)的所有数字之和为8 [4,7,8];su
- [8] );sum=0,因为大于插入数字(8)的所有数字之和为0
- [4,8];sum=8,因为大于插入数字(4)的所有数字之和为8
- [4,7,8];sum=8,因为大于插入数字(7)的所有数字之和为8
- [0,4,7,8];sum=19,因为大于插入数字(0)的所有数字之和为19
上面的示例仅用于说明,原始数组可以大得多,因此高效地计算此类和变得非常重要。有没有关于如何有效解决此问题的建议?假设您离线了解数组,您可以排序以查找每个元素的秩,例如,
[8,4,7,0]-->[(8,3)、(4,1)、(7,2)、(0,0)]
。然后用全零初始化一棵Fenwick树,要处理一个元素,将对应于更高秩的Fenwick树的后缀相加,然后在其秩处插入元素。芬威克树的进化是
[0, 0, 0, 0]
--: sum = 0
[0, 0, 0, 8]
--------: sum = 8
[0, 4, 0, 8]
-----: sum = 8
[0, 4, 7, 8]
-----------: sum = 19
如果您需要在线运行,那么我认为扩充平衡二叉搜索树是最简单的。非常感谢!