类似权值线段树分裂合并维护区间排序的套路,可以考虑用某个维护权值的数据结构来维护有序的那一段。
而此题涉及异或,考虑 01 Trie。
如果没有 4 操作,用个什么数据结构维护下每一位上 1 的个数就行了,并整体维护一个异或标记。
如果没有 1 操作,异或可能会影响大小关系,但是考虑到异或某一位相当于在 Trie 上把某一层所有左右儿子交换,于是打个标记即可。
综合起来,就是每次排序时就把上一次排序到这一次排序新加的数插入即可。
(我才不会说一开始我排序的时候没更新每次有序段的边界,插入的时候还没异或呢)
代码:
1 |
|