【LG P2801】教主的魔法
阿新 • • 發佈:2021-10-21
題意
區間加,查詢區間大於等於 \(k\) 的數的個數。
解析
這是一道資料結構題。
區間查詢
這裡貢獻仍然獨立。
考慮在每個塊內維護有序序列,這樣只需要一次二分即可計算塊內貢獻。
對於散塊,暴力遍歷即可。
若塊大小為 \(B\),則複雜度為 \(O(\dfrac{n}{B}\log B+B)\)。
區間加
對於整塊,塊內的相對順序不變,只需記錄加法標記。注意考慮加法標記對二分比較的影響。
對於散塊,需要重構有序序列,若加完後暴力排序,複雜度是 \(O(B\log B)\)。
在舊的有序序列中提取加和未被加的兩部分,各是有序序列,歸併即可做到 \(O(B)\)。
複雜度 \(O(\dfrac{n}{B}+B)\)
令 \(B=\sqrt{n\log n}\) 得到最優複雜度 \(O(q\sqrt{n\log n})\)。
總結
複雜度分析技巧 : 分塊的主要思想是平衡,若複雜度由兩部分組成,直接令兩者相等,即可解得最優塊大小。
(本題資料非常弱,錯誤做法可能可以通過)
本文作者:AFewMoon,文章地址:https://www.cnblogs.com/AFewMoon/p/15434927.html
本作品採用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。
限於本人水平,如果文章有表述不當之處,還請不吝賜教。