线性基删除

以前学过但是忘记了。
显然可以线段树分治。这里介绍在线算法。
如果要删除的数在线性基外,则直接删除即可。
如果在线性基内。
没有在线性基内的数,一定是在线性基外有若干个数可以表示它。
对于每个线性基外的数维护一个集合s,表示线性基外xor可以得到它的数。
如果线性基外某一个数(y)的集合包含x,则可以直接把这个数删除。
假若这个集合内的数是(a_1,a_2,...a_n)
(a_1wedge a_2wedge ...wedge xwedge ...wedge a_n=y)
(x=a_1wedge ...wedge y)
这说明(y)可以代替(x)(a_1,a_2,...y)xor起来可以代替(x),把(y)删除即可。
如果没有,则删除后线性基降秩。
对线性基内每个数造一个集合P,表示它进来后xor过哪些数。
找到最小的且P包含x的集合的数,然后把这个数xor线性基内所有P包含x的数即可。这样子可以消除x的影响。
为什么?原因是因为如果选择其他的,则线性基内的所有数还要重新插入,要计算该数删除的影响。
例题jzoj5059
根据题意,如果设一个点的权值为它连接的边的权值的xor和,则答案就是这些点的子集的最大xor和。
这是一个线性基经典运用。
题目中还有插入/删除,使用上面的方法即可。

原文地址:https://www.cnblogs.com/cszmc2004/p/13471489.html