[模板]线性基

学习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;
}
我是咸鱼。转载博客请征得博主同意Orz
原文地址:https://www.cnblogs.com/sdfzhsz/p/9255461.html