脑补出来的一个东西,不知道别人是怎么实现的……
自己也还没有用写的代码交过题……不过把想法和大佬说了,应该是正确的。
例题:
一个数列,每次查询[l, r]内的数中取一个数和给定值xor后的最大值。
解法:
如果没有区间限制,那么直接将所有数都插入trie树就可以了,但是这里需要指定区间的,所以不能直接处理。
因此对于trie树上的每个点,我们记录下包括这个点在内的子树中一共有多少结束节点。
然后每插入一个点相当于对结束节点的单点修改,用类似于主席树的方式插入即可。
对于区间[1, l - 1]和[1, r]的同一个位置的节点,如果2个点的值相差大于0,那么说明这个区间中有数经过了这个节点,说明这个节点是存在的。
因此我们就可以知道这个区间内的trie树长什么样了。
然后直接跑就行了。