Problem eeasy problem from Rujia Liu?
Though Rujia Liu usually sets hard problems for contests (for example, regional contests like Xi ' an 2006, Beijing Wuhan, or UVa OJ contests like Rujia Liu's presents 1 and 2), he occasionally sets easy problem (for example, ' the C Oco-cola Store ' in UVa OJ-encourage more people to solve his problems:D
Given an array, your task is to find the k-th occurrence (from left to right) of an integer v. The problem more difficult (and interesting!), you'll have to answer m such queries.
Input
There is several test cases. The first line of all test case contains-integers n, m (1<=n,m<=100,000), the number of elements in the array, a nd the number of queries. The next line contains n positive integers not larger than 1,000,000. Each of the following m lines contains the integer k and V (1<=k<=n, 1<=v<=1,000,000). The input is terminated by End-of-file (EOF). The size of input file does not exceed 5MB.
Output
For each query, print the 1-based location of the occurrence. If There is no such element, output 0 instead.
Sample Input
8 41 3 2 2 4 3 2 11 32 43 24 2
Output for the Sample Input
2070
Rujia Liu ' s Present 3: A Data Structure Contest celebrating the 100th anniversary of Tsinghua University
Special thanks:yiming Li
Note:please make sure to test your program with the gift I/O files before submitting!
The idea of hashing, originally wanted to use the structure, but the array is too large to open, so with map, one-dimensional to store the corresponding V, two-dimensional storage corresponding to the K-V subscript
#include <iostream> #include <cstring> #include <cstdio> #include <string> #include < algorithm> #include <vector> #include <map>using namespace std;map<int,vector<int> >mp;map <int,vector<int> >::iterator it;int a;int n,m;int k,v;int Main () { freopen ("In.txt", "R", stdin); while (~SCANF ("%d%d", &n,&m)) { mp.clear (); for (int i=1;i<=n;i++) { scanf ("%d", &a); /*if (Mp.count (a) ==0) { mp[a]=vector<int> {}; } * /Mp[a].push_back (i); } for (int i=0;i<m;i++) { scanf ("%d%d", &k,&v); if (Mp.count (v) ==0| | Mp[v].size () <k) puts ("0"); else { printf ("%d\n", Mp[v][k-1]);}}}}
UVA easy problem from Rujia Liu?