#include<bits/stdc++.h>
using namespace std;
const int Nmax=30000+5;
int n,q,a,b,c;
int arr[Nmax];

vector<int>tree[5*Nmax];

void build(int node,int start,int end){
    if(start==end){
        tree[node].push_back(arr[start]);
        return;
    }
    int mid=start+(end-start)/2;
    build(node*2+1,start,mid);
    build(node*2+2,mid+1,end);
    merge(tree[node*2+1].begin(),tree[node*2+1].end(),tree[node*2+2].begin(),tree[node*2+2].end(),back_inserter(tree[node]));
}

int query(int node,int start,int end,int l,int r,int v){
    if(l>end||r<start)
        return 0;
    if(start>=l&&end<=r){
        int k=upper_bound(tree[node].begin(),tree[node].end(),v)-tree[node].begin();
        return (end-start+1)-k;
    }
    int mid=start+(end-start)/2;
    return query(node*2+1,start,mid,l,r,v)+query(node*2+2,mid+1,end,l,r,v);
}

int main(){
    cin>>n;
    for(int i=0;i<n;i++)
        cin>>arr[i];
    build(0,0,n-1);
    cin>>q;
    int ans=0;
    while(q--){
        cin>>a>>b>>c;
        int i,j,k;
        i=ans^a;
        j=ans^b;
        k=ans^c;
        if(i<1)
            i=1;
        if(j>n)
            j=n;
        if(i>j){
            ans=0;
            cout<<ans<<endl;
            continue;
        }
        i--;
        j--;
        ans=query(0,0,n-1,i,j,k);
        cout<<ans<<endl;
    }
    return 0;
}