查找数组中除索引 L 到 R 之外的所有元素的总和
Find sum of all elements of an array excluding index L to R
我们有一个数组arr[0 . . . n-1]
。我们应该能够
- 求索引 L 到 R 的元素之和,其中 0 <= L <= R <= n-1 。
- 将数组的指定元素的值更改为
arr[i] = x
其中 0 <= i <= n-1。
这可以使用段树有效地解决。
但是如何解决与此相反的问题,即
- 求索引 0 到 n-1 的所有元素 (arr[i]) 的总和,不包括 L<= i <= R,其中给出了 L 和 R。
- 更改
array arr[i] = x
的指定元素的值,其中 0 <= i <= n-1。
如何像段树一样有效地解决上述问题?
假设您可以使用段树轻松计算总和(L,R)。
首先,计算整个数组的总和,称为total
。
用于更改位置 i 处的arr
-
像往常一样更新段树。
-
更新
total = total - oldValue + newValue
.
对于每个查询,打印total - sum(L,R)
注意:我们也可以使用二叉索引树(又名芬威克树)来解决这个问题,IMO 更适合。
相关文章:
- Mongodb c++驱动程序:如何查询元素的数组
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 使用strcpy将char数组的元素复制到另一个数组
- 如何将元素添加到数组的线程安全函数?
- cpp二进制搜索问题,计算给定数组中输入元素的出现次数
- 输出没有重复元素的动态数组(收缩数组)C++
- 数组中最大的非重复元素
- 数组元素打印的递归方法
- 对字符数组中的元素执行逐位操作
- 缓存std::数组的选定元素,并在c++中自动保持其一致性
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 通过交换元素使数组相同
- 按平均值替换数组中的元素
- 打印矢量数组中的所有元素
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 如何将元素从向量转移到新数组?
- 如何在向量数组中插入元素?
- 为什么 2 个相同数组的元素彼此相等
- C++ 中的二维整数数组,每行中的元素数量不均匀