一、题目
二、解法
终于吧咕的这道题补回来了,考虑搞一个数据结构,我们需要维护:
- 支持单点插入
- 支持启发式合并
- 支持统计异或和
- 支持全局 + 1 +1 +1
发现只有第四个不会做,那就搞它,考虑 + 1 +1 +1的意义在二进制下的意义是把末尾一段连续的 1 1 1删去,把前面的 0 0 0设置成 1 1 1,发现这样可以通过 t i r e tire tire树交换子树来做,但是细节不是很清楚。
考场上我想到这一点就止步了,原因是我的 t i r e tire tire树是从大到小建的(指二进制位的顺序),但是如果我们从小到大建出这颗 t i r e tire tire树,那么就可以一直往 1 1 1方向走,然后交换子树,这样做的复杂度是 log \log log的,而且实现简单!
知道这一点后我写出来就马上过掉了,我只想对自己说:不会吧,不会吧,都0202年了,不会还有人只会从小到大建 t i r e tire