$O(n)$ 维护简单插入删除 trick
首先问题如下:
- 你有一个初始为空集的不可重集合,有 \(m\) 次操作,每次操作可以插入一个数,删除一个数,每次操作后都要输出这个集合内任意一个数值,否则输出 \(0\)(保证给定元素不同,事实上,相同也很好处理)。
发现虽然可以用 \(O(n \log n)\) 的 set 进行快速插入删除,但是在查询任意数值的情况下,这种操作明显不需要这么复杂的维护,具体来说,本题有一个 \(O(n)\) 的维护方式:
我们维护一个栈,\(p_x\) 表示 \(x\) 在这个栈中出现的位置,我们可以插入时将元素加入栈顶,如果删除一个元素,我们可以用栈顶元素来替代这个位置的元素,这样就做到了 \(O(n)\),查询时查询栈顶即可。
但是这种做法的瓶颈在于值域,利用哈希仍然可以做到与值域无关,但是已经失去了它本身的优美。

浙公网安备 33010602011771号