零叉零寺

题目等价于,维护一个可重集,对于 $$$a_i$$$,如果加入后出现一对元素异或和 $$$ \lt K$$$,那么输出 Y 并清空集合;否则输出 N。

取 $$$2^k\ge K \gt 2^{k-1}$$$。那么 $$$a\oplus b \lt K$$$ 当且仅当它们除了最低 $$$k$$$ 个二进制位以外都相同。

根据 $$$\lfloor\frac{a}{2^K}\rfloor$$$ 分组。可以证明如果不会清空,一个组内部至多出现两个元素,这是因为如果存在三个及以上的数字,至少有第 $$$k$$$ 位相同的数,异或就小于 $$$K$$$。

因此检查和插入是 $$$O(1)$$$ 的,清空操作是均摊 $$$O(1)$$$ 的。总时间复杂度为 $$$O(n)$$$。

为了实现方便和快捷,此题可以直接使用大小为 $$$10^8$$$ 的 int 数组,空间复杂度为 $$$O(V)$$$。