UVA11991Easy Problem from Rujia Liu?

    xiaoxiao2021-08-22  79

    题目大意: 给出一个包含n个整数的数组,你需要回答若干询问。每次询问两个整数k和v,输出从左到右第k个v的下标(数组下标从左到右编号为1~n)。

    题目分析:这道题目主要是让我理解如何使用vector和map这两个数据结构,其中vector感觉帮助很大,毕竟是一个不定长的数组,而在代码中,a【x】的值是一个数组,用来保存v出现的下标,因为如果使用定长数组可能会造成大量的空间浪费,所以选用vector,a【x】【y】就是x第v次出现的数组下标。

    #include<cstdio> #include<map> #include<vector> using namespace std; map<int ,vector<int > >a; int main(){ int n,m,x,y; while(~scanf("%d%d",&n,&m)){ a.clear() ; for(int i=0;i<n;i++){ scanf("%d",&x); if(!a.count(x)) a[x] = vector<int >(); a[x].push_back(i+1); } while(m--){ scanf("%d%d",&x,&y); if(!a.count(y) || a[y].size() < x ) printf("0\n"); else printf("%d\n",a[y][x-1]); } } return 0; }

    转载请注明原文地址: https://ju.6miu.com/read-676845.html

    最新回复(0)