思路:
//By SiriusRen #include <bits/stdc++.h> using namespace std; const int N=500050; int n,m,a[N]; inline int read(){ int x=0;char p=getchar(); while(p<'0'||p>'9')p=getchar(); while(p>='0'&&p<='9')x=x*10+p-'0',p=getchar(); return x; } struct Node{int wei,id;Node(){}Node(int x,int y){wei=x,id=y;}}f[N][30]; int main(){ scanf("%d",&n); for(int i=1;i<=n;i++)a[i]=read(); for(int i=n;i;i--){ memcpy(f[i],f[i+1],sizeof(f[i])); Node now=Node(a[i],i); for(int j=29;~j;j--)if(now.wei&(1<<j)){ if(f[i][j].wei){ if(now.id<f[i][j].id)swap(f[i][j],now); now.wei^=f[i][j].wei; } else{ f[i][j]=now; break; } } } scanf("%d",&m); while(m--){ int l,r,x; l=read(),r=read(),x=read(); for(int i=29;~i;i--)if(x&(1<<i)){ if(!f[l][i].wei||f[l][i].id>r)break; x^=f[l][i].wei; } puts(!x?"YES":"NO"); } }