专栏文章

线性基

个人记录参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqi9gh7
此快照首次捕获于
2025/12/04 05:14
3 个月前
此快照最后确认于
2025/12/04 05:14
3 个月前
查看原文
线性基能用logV的空间存储某些数异或能得到的所有数
p[i]:二进制表示,第一个1在第i个位置的数字
构造:
CPP
void insert(long long x){
	for(int i=63;i>=0;i--){
		if((x>>i)&1){
			if(!p[i])	p[i]=x;
			x^=p[i];
		}
	}
}
查询x和这些数能异或出的最大值
CPP
long long query(long long x){
  long long ans=x;
  for(int i=63;i>=0;i--)	ans=max(ans,ans^v[i]);
  return ans;
}
线性基合并时,把其中一个的每个数插入另一个即可
如果是维护树上信息,倍增不需要一段段合并,因为线性基信息合并重复也没事(参考RMQ),只要合并两个就能解决一条链

评论

0 条评论,欢迎与作者交流。

正在加载评论...