背景题目:维护 n 个不可重整数集合,每个正整数出现的次数为 0 或 1 。要求支持插入/删除某个数(将某个数的值设为 1 或 0),在某个集合中查询第 k 小,以及把一个集合复制后合并入另一个集合(保留并入的集合)。n≤2×105
,值域与 n 同阶。
线段树合并显然不行,因为有较大重复域,复杂度会被卡成比暴力还劣。
请问:
1.一种或许可能的做法是拿 8 个ULL压一个 512 位的bitset,用循环展开等奇技淫巧把操作复杂度卡到近似常数时间,之后拿这东西造一个块状链表,合并的时候直接或过去,复杂度好像是 Θ(wn2),w=29 。
2.是否有 polylog 写法(允许离线算法)。如果没有,是否有其他解法。