[SPOJ]MAXOR

MAXOR

题解

分块板子

首先看到它的数据范围限制与询问,应该很容易联想到分块。
很显然,我们可以先处理出来每个整块到每个位置所形成的区间内的最大异或和,询问时只需要匹配以散块边界的异或和即可。
如何快速求出区间的异或和呢?很明显,差分即可。
所以我们求出区间内最大异或和即为我们将区间内的数全部作前缀和后,异或值最大的两个数的异或值。
而求最大异或值明显可以在字典树上匹配,我们只要顺次将区间内的数加入,并且在加入每个数之后都求一下该数对应的最大异或值即可。
我们记 p r e i , j , s u f i ,

posted @ 2021-09-14 22:44  StaroForgin  阅读(12)  评论(0)    收藏  举报  来源