莱德,需要你们!
#include<bits/stdc++.h>
#define lt(x) tr[x].lt
#define rt(x) tr[x].rt
#define h(x) tr[x].h
#define mid ((L+R)>>1)
#define ll long long
using namespace std;
const int N=2e5+5;
ll n,m,len=0,cnt=0,a[N],b[N],Gen[N],ans=0;
struct tree{
ll lt,rt,h;
}tr[N*34];
ll Q(ll x){
ll l=0,r=len+1;
while(l+1<r){
ll md=(l+r)>>1;
if(b[md]<=x) l=md;
else r=md;
}
return l;
}
void up(ll cur){
h(cur)=h(lt(cur))+h(rt(cur));
}
ll nw(ll cur){
tr[++cnt]=tr[cur];
return cnt;
}
ll build(ll L,ll R){
ll dx=++cnt;
if(L==R) return dx;
rt(dx)=build(mid+1,R);
lt(dx)=build(L,mid);
return dx;
}
ll ins(ll cur,ll L,ll R,ll x,ll w){
ll dx=nw(cur);
if(L==R){
h(dx)+=w;
return dx;
}
if(x<=mid)
lt(dx)=ins(lt(cur),L,mid,x,w);
else
rt(dx)=ins(rt(cur),mid+1,R,x,w);
up(dx);
return dx;
}
ll res(ll cur,ll L,ll R,ll x)
{
if(R<=x)
return h(cur);
ll cnt=0;
if(L<=x){
cnt+=res(lt(cur),L,mid,x);
}
if(mid+1<=x){
cnt+=res(rt(cur),mid+1,R,x);
}
return cnt;
}
int main(){
cin>>n;
for(ll i=1;i<=n;i++){
cin>>a[i];
b[i]=a[i];
}
sort(b+1,b+1+n);
for(ll i=1;i<=n;i++)
if(b[i]!=b[i+1])
b[++len]=b[i];
Gen[0]=build(1,len);
for(ll i=1;i<=n;i++)
Gen[i]=ins(Gen[i-1],1,len,Q(a[i]),a[i]);
cin>>m;
for(ll i=1;i<=m;i++){
ll l,r,x;
cin>>l>>r>>x;
l^=ans,r^=ans,x^=ans;
x=Q(x);
ans=res(Gen[r],1,len,x)-res(Gen[l-1],1,len,x);
cout<<ans<<'\n';
}
return 0;
}