【LG 2801】教主的魔法

题意

区间加,查询区间大于等于 \(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 国际许可协议 进行许可。

限于本人水平,如果文章有表述不当之处,还请不吝赐教。

原文地址:https://www.cnblogs.com/AFewMoon/p/15434927.html