线性基模板
int d[maxn];
int f;
void insert(int x){
for(int i=63;i>=0;i--){
if(x&(1ll<<i)){
if(!d[i]){
d[i]=x;break;
}else x^=d[i];
}
}
f=1;
}
int check(int x){
for(int i=63;i>=0;i--){
if(x&(1ll<<i))x^=d[i];
}
return x==0;
}
int ask_max(){
int ans=0;
for(int i=63;i>=0;i--){
if((ans^d[i])>ans)ans^=d[i];
}
return ans;
}
int ask_min(){
if(f)return 0;
for(int i=0;i<=62;i++){
if(d[i])return d[i];
}
}

浙公网安备 33010602011771号