#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=2e5+5;
struct Node{
int l,r,k,id;
}q[N];
int a[N],tmpans,ans[N],b[N],c[N];
int n,m,block;
int lowbit(int x){
return x&(-x);
}
void update(int x,int num){
while(x<=n){
c[x]+=num;
x+=lowbit(x);
}
return ;
}
int query(int x){
int ans=0;
while(x){
ans+=c[x];
x-=lowbit(x);
}
return ans;
}
bool cmp(Node x,Node y){
return ((x.l-1)/block^(y.l-1)/block)?(x.l-1)/block<(y.l-1)/block:((((x.l-1)/block)&1)?x.r<y.r:x.r>y.r);
}
void add(int x){
update(x,1);
}
void del(int x){
update(x,-1);
}
signed main(){
int l,r,ansl=1,ansr=0;
cin>>n;
block=sqrt(n);
for(int i=1;i<=n;++i){
cin>>a[i];
b[i]=a[i];
}
int len=unique(b+1,b+n+1)-b-1;
for(int i=1;i<=n;++i){
a[i]=lower_bound(b+1,b+len+1,a[i])-b;
}
cin>>m;
for(int i=1;i<=m;++i){
cin>>q[i].l>>q[i].r>>q[i].k;
q[i].id=i;
}
sort(q+1,q+m+1,cmp);
for(int i=1;i<=m;++i){
l=q[i].l,r=q[i].r;
while(ansl>l) --ansl,add(a[ansl]);
while(ansr<r) ++ansr,add(a[ansr]);
while(ansl<l) del(a[ansl]),++ansl;
while(ansr>r) del(a[ansr]),--ansr;
int x=upper_bound(b+1,b+len+1,q[i].k)-b-1;
ans[q[i].id]=(r-l+1)-query(x);
}
for(int i=1;i<=m;++i){
cout<<ans[i]<<endl;
}
return 0;
}