Description
给出长度为n(n<=20000)的{ai},现有m(m<=20000)个询问,每次询问给出l,r,需要回答对于任意l<=i<=j<=r,最大的 ai xor ai+1 xor...xor aj
Analysis
首先显然要将a取一个前缀异或s,最小化的那坨东西就是
sj xor si−1
考虑如果一个端点固定(
sj
),另一个端点不固定(
si
),即对于同一个
sj
,要求出多个
si
中
max(sj xor si)
这个显然把
si
全部扔进trie里,用
sj
在trie上跑就好
但是现在有两个端点不固定
分块
因为n<=20000,这个数据范围提示了分块的可行性
既然有了分块,就有预处理。我们不难借助trie预处理f[l][r]表示第l到第r块之间的答案
那么两边会剩下一小坨,在函数式的trie里面跑一下就好
于是复杂度变成了
O(n1.5logn)