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

时间:2017-08-18 13:56:04

标签: segment-tree

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

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

我该怎么做?#34;查询"使用分段树的步骤??

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

第一个解决方案

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

  • 迭代输入并将计数存储在数组中(如果是,则映射到地图) 范围很大)

  • 如果您的位置有查询,请从中添加/减去计数 如果元素足够小,这应该在O(n + q)中工作 对于数组或O(n + q log n),如果您需要使用map。

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