CF587E Duff as a Queen

一道经典套路题。
首先考虑操作二,这个东西显然可以线性基。而线性基是可以O(log2)O(log^2)的合并的,线段树维护暴力push_up即可。

然后考虑操作一,因为线性基无法删除/修改元素,所以维护时如果遇到元素修改,我们只能重建整个线性基。因此从复杂度的角度来讲我们只能进行单点修改操作。区间修改变成单点修改,很容易想到差分。所以我们线段树维护的是差分序列。

令序列A的线性基为A',序列B的线性基为B'。如果A中的每个数都能被B中的一个子集异或得到,且B中的每个数都能被A中的一个子集异或得到,那就有A=BA'=B'。我们考虑对于原序列[l,r][l,r]的线性基,差分序列[l+1,r][l+1,r]的线性基再插入原序列的[l,l][l,l]得到的线性基和它是等价的。所以查询也能查询了。

这道题的套路就是用线段树维护区间的线性基,以及区间异或转差分。