题目链接:https://codeforces.com/contest/1100/problem/F
题目思路:本题属于前缀线性基裸题,对前缀线性基了解较少的可以点这里。
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int MAXN=5e5+5;
int pos[MAXN][50],lb[MAXN][50];
void Insert(int x,int i)
{
for(int j=24;j>=0;j--){
lb[i][j]=lb[i-1][j];
pos[i][j]=pos[i-1][j];
}
int now=i,val=x;
for(int j=24;j>=0;j--){
if(val&(1<<j)){
if(!lb[i][j]){
pos[i][j]=now;
lb[i][j]=val;
break;
}
if(pos[i][j]<now){
swap(pos[i][j],now);
swap(lb[i][j],val);
}
val^=lb[i][j];
}
}
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
int a;
scanf("%d",&a);
Insert(a,i);
}
int q;
scanf("%d",&q);
while(q--)
{
int l,r;
scanf("%d%d",&l,&r);
int ans=0;
for(int i=24;i>=0;i--){
if(pos[r][i]>=l&&(ans^lb[r][i])>ans){
ans=ans^lb[r][i];
}
}
printf("%d\n",ans);
}
}