标签:维护 模板 date turn 时间复杂度 insert 空间 最大 inline
线性基是一个最小的集合 \(S = \{p_i\}, i \in \{ 0, 1, \cdots ,n \}\), \(p_i\) 为二进制数, 它可以通过异或唯一的表示出 \(T = \{a_i\}, i \in \{ 0, 1, \cdots ,m \}\) 中的每一个值. 由于最小性, \(n \le m\).
也就是说, \(S\) 和 \(T\) 在异或意义下张成的空间等价.
为了便于维护和查询, 规定 \(p_i \in S\) 的二进制最高位为第 \(i\) 位, 值为1.
根据定义构造即可.
时间复杂度 \(O(\log v)\), 其中\(v\)为值域大小.
ll lbase[l2sz];
void insert(ll v){
repdo(i,62,0){
if((v>>(ll)i)==0)continue;
if(lbase[i]==0){lbase[i]=v;break;}
v^=lbase[i];
}
}
类似构造, 如果某次异或后为0则能表示; 否则不能.
对于每一位, 如果异或之后变大就异或.
正确性显然.
void getmax(ll &a,ll b){if(a<b)a=b;}
ll sol(){
ll ans=0;
repdo(i,62,0){
getmax(ans,ans^lbase[i]);
}
return ans;
}
如果能表示出0则为0; 否则, 显然数组中最小非0值为最小异或值.
//to update
标签:维护 模板 date turn 时间复杂度 insert 空间 最大 inline
原文地址:https://www.cnblogs.com/ubospica/p/10391964.html