Loading

$O(n)$ 维护简单插入删除 trick

首先问题如下:

  • 你有一个初始为空集的不可重集合,有 \(m\) 次操作,每次操作可以插入一个数,删除一个数,每次操作后都要输出这个集合内任意一个数值,否则输出 \(0\)(保证给定元素不同,事实上,相同也很好处理)。

发现虽然可以用 \(O(n \log n)\) 的 set 进行快速插入删除,但是在查询任意数值的情况下,这种操作明显不需要这么复杂的维护,具体来说,本题有一个 \(O(n)\) 的维护方式:

我们维护一个栈,\(p_x\) 表示 \(x\) 在这个栈中出现的位置,我们可以插入时将元素加入栈顶,如果删除一个元素,我们可以用栈顶元素来替代这个位置的元素,这样就做到了 \(O(n)\),查询时查询栈顶即可。

但是这种做法的瓶颈在于值域,利用哈希仍然可以做到与值域无关,但是已经失去了它本身的优美。

posted @ 2024-11-15 16:04  Alexande  阅读(8)  评论(0)    收藏  举报