一道经典套路题。
首先考虑操作二,这个东西显然可以线性基。而线性基是可以的合并的,线段树维护暴力push_up
即可。
然后考虑操作一,因为线性基无法删除/修改元素,所以维护时如果遇到元素修改,我们只能重建整个线性基。因此从复杂度的角度来讲我们只能进行单点修改操作。区间修改变成单点修改,很容易想到差分。所以我们线段树维护的是差分序列。
令序列A的线性基为A',序列B的线性基为B'。如果A中的每个数都能被B中的一个子集异或得到,且B中的每个数都能被A中的一个子集异或得到,那就有。我们考虑对于原序列的线性基,差分序列的线性基再插入原序列的得到的线性基和它是等价的。所以查询也能查询了。
这道题的套路就是用线段树维护区间的线性基,以及区间异或转差分。