假设我有一个数组 [1, 2, 3, 5, 5, 6, 5, 5]
现在,可以有两种操作。其中之一是"更新"操作,即将索引 4[1 基于索引] 中的值增加 X。另一个操作是"查询"操作,其中给定一个范围,假设 [4, 8](包括(和一个值假设 5。现在找到给定范围内值 5 的频率 [4, 8]。在这种情况下,答案应该是 4。
如何使用段树执行此"查询"步骤?
提前谢谢。
我有两个解决方案,但没有使用段树
第一个解决方案:
-
将每个查询拆分为
freq(r,x)-freq(l-1,x)
-
迭代输入并将计数存储在数组中(如果范围很大,则
进行映射( -
如果对您的位置有查询,请从 数组 如果元素对于数组来说足够小
,这应该在 O(n + q( 中工作,或者如果你需要使用 map,这应该在 O(n + q( 中工作。
第二种解决方案:使用Mo算法解决时间复杂度O((N + Q) * sqrt(N) * F).
的问题