问题标签 [fenwick-tree]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
92 浏览

c++ - 你为什么要把 10^9+7 加到一个数字上,然后用 10^9+7 取模?

我正在解决一个名为 shill 和 wave sequence 的 Fenwick 树的问题,它没有通过所有测试用例,直到我添加了一行查看解决方案并且现在想要找到它的目的,这是我的代码

b=(b+mod)%mod 但是为什么呢?

0 投票
0 回答
68 浏览

algorithm - 最多两个,最小长度,总和为 k 的子数组

给定一个未排序的整数数组,我必须找到最多两个子数组(1 或 2),它们的和等于 k。这些子阵列必须尽可能短。

所以在数组 [10, 6, 4, 3] 中,k -10 的正确答案是 [10] 而不是 [6, 4]。

此外,1 个长度为 1 的子阵列优于 2 个总长度为 2 的子阵列,它们优于 1 个总长度为 3 的子阵列,其中总长度是子阵列长度的总和

我曾想过使用芬威克树,但复杂性仍然太高。

0 投票
0 回答
31 浏览

algorithm - Fenwick 树批量更新

Fenwick 树有一个 update(idx, delta) 函数,可以这样实现:

因此,您正在更新您当前的 idx,然后将您的更改推送到最后。
我想在一个循环中执行几个更新调用,比如

如果我提前知道更新索引的范围(这里是 12 - 17),更新可能会被优化。与其每次都推到最后,我们可以推到某个索引,缓冲剩余的变化,然后在最后一次更新后,将缓冲的变化推到最后。提供图片解释概念:
文本
例如取范围 3 - 7。
更新索引 3 将导致更新以下索引:3 - 4 - 8 - 16。
更新索引 4 将导致:4 - 8 - 16
更新索引 5 将导致:5 - 6 - 8 - 16

最好将所有内容推到 8 点,缓冲休息,然后推到 16 点。

问题

有没有更好的方法来找到这个节点推送到(这里是 8 ),知道范围开始和结束?

非理想解决方案