#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+6;
int n,q;
int a[N],b[N],f[N];
int tree[N<<5],ls[N<<5],rs[N<<5];
int root[N];
int last_ans;
int x,y,k;
int toooooooooooooooooot;
bool cmp(int a,int b){return a<b;}
int build(int l,int r)
{
int rt=++toooooooooooooooooot;
if(l==r) return rt;
int mid=l+((r-l)>>1);
ls[rt]=build(l,mid);
rs[rt]=build(mid+1,r);
return rt;
}
int update(int gen,int l,int r,int x,int y)
{
int rt=++toooooooooooooooooot;
tree[rt]=tree[gen]+y;
ls[rt]=ls[gen];
rs[rt]=rs[gen];
if(l==r) return rt;
int mid=l+((r-l)>>1);
if(x<=mid) ls[rt]=update(ls[gen],l,mid,x,y);
else rs[rt]=update(rs[gen],mid+1,r,x,y);
return rt;
}
int query(int rt,int l,int r,int s,int t)//目前的根 区间左 区间右 <=x
{
if(s<=l and r<=t) return tree[rt];
int mid=l+((r-l)>>1);
int ans=0;
if(s<=mid) ans+=query(ls[rt],l,mid,s,t);
if(mid+1<=t) ans+=query(rs[rt],mid+1,r,s,t);
return ans;
}
signed main()
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i],b[i]=a[i];
sort(b+1,b+n+1,cmp);
int len=unique(b+1,b+n+1)-b-1;
root[0]=build(1,len);
for(int i=1;i<=n;i++)
{
f[i]=lower_bound(b+1,b+len+1,a[i])-b;
root[i]=update(root[i-1],1,len,f[i],a[i]);
}
cin>>q;
while(q--)
{
cin>>x>>y>>k;
x^=last_ans,y^=last_ans,k^=last_ans;
if(x>y) swap(x,y);
if(k<b[1]){cout<<0<<'\n';last_ans=0;continue;}
last_ans=query(root[y],1,len,1,lower_bound(b+1,b+len+1,k)-b)-query(root[x-1],1,len,1,lower_bound(b+1,b+len+1,k)-b);
cout<<last_ans<<'\n';
}
return 0;
}