CodeForces - 1100F:Ivan and Burgers 线性基 在线

 题意:给定N个数,Q次询问,求区间最大异或和。

我们纪录一个前缀和 线性基,保留最大的位置。

#include 
#define ll long long
using namespace std;
const int maxn = 1e6+4;
int pos[maxn][33],base[maxn][33],ps[33],bs[33]; 
void add(int x,int id){
	for(int i=20;i>=0;i--){
		if(x&(1<=0;j--){
			pos[i][j] = ps[j];	base[i][j] = bs[j];	
		}
	}
	scanf("%d",&m);
	int l,r,ans;
	for(int i=1;i<=m;i++){
		ans = 0;
		scanf("%d %d",&l,&r);
		for(int j=20;j>=0;j--){
			if(pos[r][j]>=l&&((ans^base[r][j])>ans)){
				ans^=base[r][j];
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}

 

你可能感兴趣的:(cf,线性基)