当查询数很高时,如何将大于k的数组范围内的元素替换为k? 假设每个查询都是由形式l r k给出的;其中[l ... r]是阵列的范围。如何用k替换小于k的范围元素?
-4
A
回答
0
由于我的第一个答案创建了大量的评论意见,我将在新的答案中结合所有内容。
我们将使用Segment Tree作为辅助数据结构,它将用于回答这个问题:范围[l,r]上的最小值是多少。最初,所有分段树节点都会填充一些“Infinity”数字,这可能是您的问题中的201(因为根据您的评论,所有K都低于200)。
一旦我们阅读我们的输入数组(可以称其为A),我们要处理查询:
对于每个查询[L,R,K]我们要更新我们的段树:尝试在范围[L,R]上设置新的最小K值。这可以通过使用惰性传播的O(LogN)来完成。这里是一个很好的例子http://se7so.blogspot.com/2012/12/segment-trees-and-lazy-propagation.html
现在我们需要建立最终的数组。我们遍历数组中的每个索引并将其替换为A [i] = min(A [i],minimum_on_range(i,i))。这将需要N *日志(n)步
这种做法的总的复杂性是M *日志(N)+ N *日志(N)
+0
这是一个很好的解释,但你能解释我怎样才能“设置新的最小K在范围[L,R]”。如果数组A的所有元素初始为201,并且我们只对最终数组感兴趣,那么这种方法仍然可以使用吗? –
相关问题
- 1. 范围小于k的子阵列的数量
- 2. 类型参数K不在类型变量K的范围内
- 3. 第K个最小元素算法
- 4. 找到第k个最小元素
- 5. K排序的块范围查询
- 6. 时间从每个k列表中至少包含1个元素的最小元素范围的复杂性
- 7. k个最大元素
- 8. 在Python中生成大小为k(包含k个元素)的所有子集
- 9. 置换n个元素由不多于k的位置
- 10. 如何从n个元素中找到k-置换的索引?
- 11. 如何从对象列表中提取K个“最小”元素?
- 12. 如何找到k的最佳值对于k-NN?
- 13. 下一个回文小于k用c
- 14. 对于k
- 15. 在最小堆中查找k个最小元素
- 16. 用于删除O(logN)中小于k的元素的数据结构其中N是元素数
- 17. 堆树中的第K个元素
- 18. 搜索k个最近的元素
- 19. k个元素的全部组合n
- 20. R - 选择列的第k个元素
- 21. k大小p的独特组合,无需替换
- 22. 使用QuickSelect第k个最小元素排序矩阵
- 23. 在matlab中如何做(m,n,k)*(n,k)=(m,k)?
- 24. 如何使用Excel VBA找到第k个最小元素的匹配ID?
- 25. 如何用-k替换unix排序加号?
- 26. 从JAVA中的hashmap中删除最小的k元素
- 27. 在大小为N的数组的每k个元素中查找最小元素和第二小元素
- 28. 如何实现最小堆排序来查找第k个最小元素?
- 29. 计数的数字被K整除用的范围
- 30. 二叉搜索树中K个最小元素的总和
你能告诉你做的事这个 ? – ameyCU
我已经使用了朴素的方法来进行comap和k替换。由于查询次数非常多,因此复杂度为m * n。我想要一个高效的算法来做到这一点。 –
我想在所有查询实施后更新数组 –