#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
struct Stree{
int ls,rs;
long long sum;
#define ls(x) tree[x].ls
#define rs(x) tree[x].rs
#define sum(x) tree[x].sum
}tree[N<<5];
int cnt,root[N];
int n,q,a[N],A[N],len;
long long l,r,x;
long long ans;
int Q(int x){
int t=lower_bound(A+1,A+1+len,x)-A;
if(t>len||A[t]!=x)t--;
return t;
}
int build(int l,int r){
int x=++cnt;
if(l==r)return x;
int mid=l+r>>1;
ls(x)=build(l,mid);
rs(x)=build(mid+1,r);
}
int insert(int x,int l,int r,int i,int k){
int y=++cnt;
ls(y)=ls(x);
rs(y)=rs(x);
sum(y)=sum(x)+k;
if(l==r)return y;
int mid=l+r>>1;
if(i<=mid)
ls(y)=insert(ls(x),l,mid,i,k);
else
rs(y)=insert(rs(x),mid+1,r,i,k);
return y;
}
long long query(int x,int l,int r,int s,int t){
if(s<=l&&r<=t)return sum(x);
long long res=0;
int mid=l+r>>1;
if(s<=mid)res+=query(ls(x),l,mid,s,t);
if(t>mid)res+=query(rs(x),mid+1,r,s,t);
return res;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++)
cin>>a[i],A[i]=a[i];
sort(A+1,A+1+n);
len=unique(A+1,A+1+n)-A-1;
root[0]=build(1,len);
for(int i=1;i<=n;i++)
root[i]=insert(root[i-1],1,len,Q(a[i]),a[i]);
cin>>q;
while(q--){
cin>>l>>r>>x;
l^=ans;r^=ans;x^=ans;
int L=query(root[l-1],1,len,1,Q(x)),R=query(root[r],1,len,1,Q(x));
cout<<(ans=(R-L))<<'\n';
}
return 0;
}