假设,我有一个数组[1,2,3,5,5,6,5,5]
现在,可以有两种操作。其中一个是"更新"操作,即将索引4 [1基于索引]中的值增加X.其他操作是"查询"给定范围的操作,假设[4,8](包括两者)和值假设5.现在在给定范围[4,8]中找到值5的频率。在这种情况下,答案应该是4。
我该怎么做?#34;查询"使用分段树的步骤??
提前致谢。
答案 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).