线性基
参考资料
例题
洛谷 P3812 【模板】线性基
给定 个整数(数字可能重复),求在这些数中选取任意个,使得他们的异或和最大。
Code (1)
#include <bits/stdc++.h>
using namespace std;
using ll=long long;
const int N=63;
ll p[N];
void insert(ll x)
{
for(int i=N;i>=0;i--)
{
if(x>>i==1)
{
if(p[i]==0)
{
p[i]=x;
return;
}
else x^=p[i];
}
}
}
ll query()
{
ll res=0;
for(int i=N;i>=0;i--)res=max(res,res^p[i]);
return res;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin>>n;
for(int i=1;i<=n;i++)
{
ll t;
cin>>t;
insert(t);
}
cout<<query()<<'\n';
return 0;
}