有没有办法使用段树找到给定范围内数字的频率?



假设我有一个数组 [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).的问题

最新更新