学习dalao的blog
flag++
void insert(long long x){
for(int i=60;~i;i--){
if(x&(1ll<<i)){
if(!base[i]) {base[i]=x;return;}
x=x^base[i];}
}
}
long long query_max(long long x){
for(int i=60;~i;i--){
if((x^base[i])>x)x^=base[i];
}
return x;
}
long long query_min(long long x){
for(int i=10;i<=60;i++)
if(base[i])return base[i];
return 0;
}
void rebuild(){
for(int i=60;~i;i--)
for(int j=i-1;~j;j--)
if(base[i]&(1ll<<j))
base[i]^=base[j];
for(int i=0;i<=60;i++)
if(base[i]) pos[cnt++]=base[i];
}
long long query_val(long long kth) {
long long ret=0;
if(kth>=(1ll<<cnt)) return -1;
for(int i=60;~i;i--)
if(kth&(1ll<<i))
ret^=pos[i];
return ret;
}