题面
大意
给一个长为 n n n的数组 a [ ] a[] a[], 1 < = a i < = n 1<=a_i<=n 1<=ai<=n。
给出一个 Q Q Q, K K K
然后有 Q Q Q个询问,每个询问给出区间 [ L , R ] [L,R] [L,R],要求回答 K K K与 a L a_L aL~ a R a_R aR的一个子集(可以是空集)的异或值的最大值。
思路
网上多数是线段树+线性基的写法,我来放一个学长教的不需要线段树的写法。
区间线性基
- 首先,将原数组中的数从左到右插入到线性基中,每插入一个数都维护一个新的线性基,用b[MAXN][62]来保存
如插入原数组第i位时得到了[1,i]之间的线性基b[i][62],在插入第i+1位时首先复制第i位的线性基,然后将a[i+1]加入到b[i+1][62]中就直接得到了[1,i+1]之间的线性基