把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

LOJ #2461. 「2018 集训队互测 Day 1」完美的队列

遇事不决分个块先,然后就变成了 \(O(\sqrt n)\) 次整块加入和 \(O(\sqrt n)\) 次单点插入。

然后对于每个块,从后到前扫描线。我们希望能求出每个插入操作最晚什么时候被弹出。对于单点插入,直接查询这个位置往后 \(k\) 大值即可。对于整块插入,发现其最晚弹出时间是单调不增的,因此可以 two-pointers,用一个数组维护每个位置被散块修改了多少次以及用一个 \(tag\) 维护整块修改了多少次即可。这样的复杂度是 \(O(n\sqrt n)\) 的。

但是实际上分块是没有必要的。我们考虑放到线段树上,把每个插入拆到线段树上的节点,然后对于每个节点,就只做恰好插入在这个节点的删除时间。

仍然暴力扫子树内的插入,这一部分每个插入只会被扫 \(\log n\) 次,而到祖先路径上的插入由于都是整体 \(-1\),因此可以用一个 bit 维护单点修改,区间求和以及区间 \(k\) 大值,因此复杂度可以做到 \(O(n\log^2 n)\)

submission

posted @ 2024-06-20 08:46  275307894a  阅读(13)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end