UVa 11991 Easy Problem from Rujia Liu? ——(STL map)
STL的应用题目:
题目大意:
给出一个数组,找到其中第n个给定的数值,输出它从1开始的下标。
Input
1 | 8 4 |
第一行是两个整数n
,m
。表示数组有n
个元素,下一行给出了这个数组。
接下来的m
行每行表示一个查询,包含两个整数k
和v
。
Output
1 | 2 |
任务是找出数组中第k
个v
值的下标(1-based)
这题不用常规思路,而是考虑使用STL的map。
将数组的数字作为map的下标,将这个数在数组中第几次出现作为值记录下来。因为一个数会出现多次,所以考虑采用vector
容器,将这些值保存在vector
中。
这样本题使用STL容器map<int, vector<int>> Array
。
在查询的时候,只需要查询Array[v][k-1]
,然后把这个值输出就可以了。
但是由于存在找不到的情况,所以换用at()
方法。at
方法在越界的时候会抛出out_of_range
异常,我们只要接收这个异常,然后输出0即可。
下面是AC代码:
1 |
|
PS out_of_range
定义在stdexcept
头文件中,我曾经因为未包含此头文件结果CE掉的奇怪错误。