前置题目:P4839 P 哥的桶。
首先知道线性基是可以合并的,且具有交换律。因此容易想到线段树维护区间线性基,但是这样无法支持区间异或的操作。此时容易想到分块处理,但是这样时间复杂度变为 O(nnω2) 其中 ω 为位数这里取 ω=32,一看就不是能过得去的样子。
然后观察到一个特别厉害的性质:在线性基中集合 {al,al+1,…,ar} 可以通过选取子集异或表示出的数的集合和 {al,al⊕al+1,…,ar−1⊕ar} 表示出的数的集合是等价的。因此维护 bi=ai⊕ai+1 然后在 b 上操作,这样一来修改操作只需要处理 l 和 r+1 两个端点处的值即可。而查询的时候先求区间线性基,然后再把 al 的值添加到线性基里最后统一求值即可。而维护 al 这种端点值可以先差分然后丢到一个 BIT 里维护。
总时间复杂度为 O(nlog2nω),可以通过该题。
喜欢的话,留下你的评论吧~