【问题标题】:Is there any way to find frequency of a number in a given range using segment tree?有没有办法使用线段树在给定范围内查找数字的频率?
【发布时间】:2018-01-27 05:55:33
【问题描述】:

假设,我有一个数组 [1, 2, 3, 5, 5, 6, 5, 5]

现在,可以有两种操作。其中之一是“更新”操作,即将索引 4[1 based indexing] 中的值增加 X。其他操作是“查询”操作,在给定范围的情况下,假设 [4, 8](包括)和值假设为 5。现在在给定范围 [4, 8] 中找到值 5 的频率。在这种情况下,答案应该是 4。

如何使用分段树来执行此“查询”步骤??

提前致谢。

【问题讨论】:

    标签: segment-tree


    【解决方案1】:

    我有两个解决方案,但没有使用段树

    第一个解决方案

    • 将每个查询拆分为freq(r,x)-freq(l-1,x)

    • 遍历输入并将计数存储在数组中(或映射 if
      范围很大)

    • 如果对您的职位有疑问,请从 如果元素足够小,这应该在 O(n + q) 中工作
      如果需要使用 map,则为数组或 O(n + q log n)。

    第二种解决方案: 使用Mo's Algorithm 解决时间复杂度问题O((N + Q) * sqrt(N) * F).

    【讨论】:

    • 谢谢.. :) Mo 的算法在这种情况下应该可以工作。
    猜你喜欢
    • 2022-01-20
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    相关资源
    最近更新 更多