题意:给定一个数组,然后有若干组询问,每次询问求第k个v出现的位置。
思路:用vector构造模拟,吧相同的数的位置放在同一个vector里,对于每次查询输出mp[v][x-1];
code:
#include <bits/stdc++.h>
using namespace std;
map<int,vector<int> >mp;
int main()
{
int n,m,k,v;
while (~scanf("%d%d",&n,&m)){
mp.clear();
for (int i=0;i<n;i++){
scanf("%d",&v);
mp[v].push_back(i+1);
}
for (int i=0;i<m;i++){
scanf("%d%d",&k,&v);
if (k>mp[v].size())
puts("0");
else printf("%d\n",mp[v][k-1]);
}
}
}

本文介绍了一种使用 C++ 的 map 和 vector 结构来优化数组查询的方法。通过预先存储相同数值在数组中的位置信息,可以快速定位到特定元素的第 k 次出现位置,有效提升了查询效率。
535

被折叠的 条评论
为什么被折叠?



