32 位(下标 31 到 0)。0/1 两个儿子,以及计数器 cnt,表示有多少个编号的路径经过该节点。这样可以处理重复编号,也方便删除。1):把 x 按二进制从高到低插入,路径上每个节点的 cnt 加 1。2):沿 x 的二进制路径走,路径上每个节点的 cnt 减 1。题目保证该编号一定存在。3):若根节点 cnt 为 0(货仓为空),答案为 −1。否则从高位到低位贪心:若当前位为 b,优先走向 1−b 且 cnt > 0 的儿子,使该位异或结果为 1;否则只能走 b 分支。把所有成功取到相反位的权值累加,得到最大异或值。货仓里维护着一批货物编号。初始时货仓为空,随后会依次发生 n 次操作,操作共有三种:
1:向货仓放入一个编号为 x 的货物(允许出现相同编号);2:从货仓取出一个编号为 x 的货物(保证取出前货仓中至少有一件该编号);3:询问当前货仓中,哪一个编号与给定整数 x 的按位异或值最大。若货仓为空,则该次询问的答案为 −1。对于每一次类型 3 的询问,你需要输出对应答案。保证至少发生一次询问。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.