#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int n = 10004;
vector<int> tree[4*n+1];
class segmentTree{
	
public:
   //int n;
    
    void build(int arr[],int s, int e, int node){
        if(s==e){
            tree[node].push_back(arr[s]);
            return;
        }
        int mid = (s+e)/2;
        build(arr,s,mid,2*node);
        build(arr,s,mid,2*node+1);
        merge(tree[2*node].begin(),tree[2*node].end(),tree[2*node+1].begin(),tree[2*node].end(),back_inserter(tree[node]));
    }
    int query(int ss, int se, int l, int r, int k, int node){
        if(l>se || r<ss){
            return 0;
        }
        if(ss>=l && se<=r){
            return tree[node].size()-(upper_bound(tree[node].begin(),tree[node].end,k)-tree[node].begin());
        }
        int mid = (ss+se)/2;
        int left = query(ss,mid,l,r,k,2*node);
        int right = query(mid+1,se,l,r,k,2*node+1);
        return left+right;
    }
};
int main(){
    segmentTree t;
    int n;
    cin>>n;
    int arr[n];
    for(int i=0;i<n;i++){
        cin>>arr[i];
    }
    t.build(arr,0,n-1,1);
    cin>>q;
    int ans = 0;
    while(q--){
        int i,j,k,l,r;
        cin>>i>>j>>k;
        l=i^ans;
        r=j^ans;
        k=k^ans;
        ans = t.query(0,n-1,l,r,k,1);
        cout<<ans<<endl;
    }
    
return 0;
}