解题思路
1.使用无序哈希表unordered_map<int,vector
代码
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
int main(){
int n ;
cin >> n;
unordered_map<int, vector<int>> f; //(喜好值, 用户编号)
for(int i = 0; i < n; i++){
int val;
cin >> val;
f[val].push_back(i + 1); //从示例可看出编号从1开始
}
int q;
cin >> q;
for(int i = 0; i < q; i++){
int l, r, k;
cin >> l;
cin >> r;
cin >> k;
if(f.count(k) == 0){
cout << 0 << endl;
continue;
}
auto v = f[k];
int pos1 = lower_bound(v.begin(), v.end(), l) - v.begin(); //大于等于l的第一个位置
int pos2 = upper_bound(v.begin(), v.end(), r) - v.begin(); //大于r的第一个位置
cout << pos2 - pos1 << endl; //[pos1:pos2-1]区间
}
return 0;
}
京公网安备 11010502036488号