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

Posted

技术标签:

【中文标题】有没有办法使用线段树在给定范围内查找数字的频率?【英文标题】: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。

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

提前致谢。

【问题讨论】:

【参考方案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 的算法在这种情况下应该可以工作。

以上是关于有没有办法使用线段树在给定范围内查找数字的频率?的主要内容,如果未能解决你的问题,请参考以下文章

如何在给定范围内生成随机数作为 Tensorflow 变量

宽带接入技术

在 O(1) 空间中的数组中查找重复元素(数字不在任何范围内)

查找给定日期范围内的工作日/周末数

从整数范围内搜索

CCPC河南省赛B-树上逆序对| 离线处理|树状数组 + 线段树维护逆序对 + dfs序 + 离散化