有没有办法使用线段树在给定范围内查找数字的频率?
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 的算法在这种情况下应该可以工作。以上是关于有没有办法使用线段树在给定范围内查找数字的频率?的主要内容,如果未能解决你的问题,请参考以下文章