这题尝试用分块做TLE了,不是常数的问题
n,q≤2×105 时限 2s 感觉不会T的吧
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N = 2e5+10;
int n,q;
int L[N],R[N],pos[N],block,num;
int a[N],d[N];
void build(){
block=sqrt(n);
num=n/block;
if(n%block)num++;
for(int i=1;i<=num;i++){
L[i]=(i-1)*block+1;
R[i]=i*block;
}
R[num]=n;
for(int i=1;i<=n;i++)pos[i]=(i-1)/block+1;
for(int i=1;i<=num;i++){
sort(d+L[i],d+R[i]+1);
}
}
int query(int l,int r,int k){
int x=pos[l],y=pos[r];
if(x==y){
int ans=0;
for(int i=l;i<=r;i++)if(a[i]==k)ans++;
return ans;
}
int ans=0;
for(int i=l;i<=R[x];i++){
if(a[i]==k)ans++;
}
for(int i=x+1;i<=y-1;i++){
ans+=(upper_bound(d+L[i],d+R[i]+1,k)-lower_bound(d+L[i],d+R[i]+1,k));
}
for(int i=L[y];i<=r;i++){
if(a[i]==k)ans++;
}
return ans;
}
int main(){
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
cin>>n;
for(int i=1;i<=n;i++)cin>>a[i],d[i]=a[i];
cin>>q;
while(q--){
int l,r,x;
cin>>l>>r>>x;
cout<<query(l,r,x)<<endl;
}
return 0;
}