线性基模板(线性基)
蒟蒻写了个模板,通过了对拍检验。
该模板资磁ppl的博客中提到的所有操作,除了getmin和getmax的意义不同。
蒟蒻的getmin和getmax是求线性基内能与x异或出的最小/大值。那么ppl的getmax等价于这里的getmax(0)。
可兼容bitset(不能使用getmin,getmax和getkth),可兼容二进制高精度模板
#include<bits/stdc++.h>
using namespace std;
namespace FlashHu{
#define I inline
#define RG register
#define R RG T
#define UI unsigned int
template<typename T,const UI L>
struct LB{
T a[L];
LB(){
memset(a,0,sizeof(a));
}
I void operator+=(R x){
for(RG UI i=L-1;x!=0;--i)
if(((T)1<<i&x)!=0){
if(a[i]==0){a[i]=x;return;}
x^=a[i];
}
}
I void operator+=(RG LB&x){
for(RG UI i=0;i<L;++i)
*this+=x.a[i];
}
I bool exist(R x){
if(x==0)return 0;
for(RG UI i=L-1;x!=0;--i)
if(((T)1<<i&x)!=0){
if(a[i]==0)return 0;
x^=a[i];
}
return 1;
}
I T getmin(R x){
for(RG UI i=L-1;~i;--i)
if(x>(x^a[i]))x^=a[i];
return x;
}
I T getmax(R x){
for(RG UI i=L-1;~i;--i)
if(x<(x^a[i]))x^=a[i];
return x;
}
I T getkth(R k){
R x=1;
RG UI i,j;
static T b[L];
for(i=0;i<L;++i,x<<=1)
for(j=i+1;j<L;++j)
if((a[j]&x)!=0)a[j]^=a[i];
for(i=j=0;i<L;++i)
if(a[i]!=0)b[j++]=a[i];
if((T)1<<j<=k)return 0;
x=0;
for(i=0;i<L;++i)
if(((T)1<<i&k)!=0)x^=b[i];
return x;
}
};
#undef I
#undef RG
#undef R
#undef UI
}
标签:
线性基
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具