独立做出来的一道题!
考虑题目特殊性就可以
D - Range Count Query (atcoder.jp)
题意:
思路:
本来一点思路都没,只会暴力
但是有个特殊条件:ai的值域在1~N之间
因此可以考虑哈希
考虑值域的那根数轴,值域中的每个数都插入位置
那么每次询问之间二分出第一个>=L的和最后一个<=R的位置,就可以计算贡献了!
Code:
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int mxn=2e5+10;
vector<int> v[mxn];
int N,Q,L,R,X;
int a[mxn];
signed main(){
cin>>N;
for(int i=1;i<=N;i++) cin>>a[i],v[a[i]].push_back(i);
cin>>Q;
while(Q--){
cin>>L>>R>>X;
int pos1=lower_bound(v[X].begin(),v[X].end(),L)-v[X].begin();
int pos2=upper_bound(v[X].begin(),v[X].end(),R)-v[X].begin()-1;
cout<<max(0ll,pos2-pos1+1)<<'\n';
}
}