前三个点AC,中三个点TLE,后四个点RE dalao救我
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(!(ch<='9'&&ch>='0'))
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0')
{
x=(x<<3)+(x<<1)+(ch^48);
ch=getchar();
}
return x*f;
}
inline void write(int x)
{
if(x<0)
{
putchar('-');
x=-x;
}
if(x>9) write(x/10);
putchar('0'+x%10);
}
int a[400005],b[400005],c[400005],bl,ans[400005];
struct node
{
int l,r,x,id;
}q[400005];
bool cmp(node d,node e)
{
if(d.l/bl==e.l/bl) return d.l<e.l;
return d.l/bl<e.l/bl;
}
void add(int u)
{
c[a[u]]++;
}
void del(int u)
{
c[a[u]]--;
}
signed main()
{
// freopen(".in","r",stdin);
// freopen(".out","w",stdout);
int T=read();
while(T--)
{
memset(c,0,sizeof(c));
int n=read();
bl=sqrt(n);
for(int i=1;i<=n;i++)
{
b[i]=a[i]=read();
}
sort(b+1,b+1+n);
int si=unique(b+1,b+1+n)-b-1;
for(int i=1;i<=n;i++)
{
a[i]=lower_bound(b+1,b+1+si,a[i])-b;
}
int Q=read();
for(int i=1;i<=Q;i++)
{
q[i].id=i;
q[i].l=read();
q[i].r=read();
q[i].x=read();
}
sort(q+1,q+1+Q,cmp);
for(int i=1,L=1,R=0;i<=Q;i++)
{
while(R<q[i].r) add(++R);
while(L>q[i].l) add(--L);
while(R>q[i].r) del(R--);
while(L<q[i].l) del(L++);
ans[q[i].id]=c[q[i].x];
}
for(int i=1;i<=Q;i++)
{
write(ans[i]);
putchar('\n');
}
}
return 0;
}