线性基(模板)
线性基性质:
1.原序列里面的任意一个数都可以由线性基里面的一些数异或得到。
2.线性基里面的任意一些数异或起来都不能得到0 0
3.线性基里面的数的个数唯一,并且在保持性质一的前提下,数的个数是最少的
//#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<algorithm> #include<cmath> #include<cstring> #include<queue> #include<set> #include<map> #include<vector> #define mem(a,b) memset(a,b,sizeof(a)) #define ll long long #define sl(x) scanf("%lld",&(x)) #define rep(i,a,b) for(int i=a;i<=b;i++) using namespace std; int p[105]; void Insert(int now) { per(i,62,0) { if((now&((ll)1<<i))) { if(!p[i]) { p[i]=now; break; } now^=p[i]; } } } #undef int int main() { #define int long long int n; sl(n); rep(i,1,n) { int now; sl(now); Insert(now); } int ans=0; per(i,62,0) if((ans^p[i])>ans) ans^=p[i]; cout<<ans<<"\n"; return 0; }