當查詢數很高時,如何將大於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。我想要一個高效的算法來做到這一點。 –
我想在所有查詢實施後更新數組 –