Though Rujia Liu usually sets hard problems for contests (for example, regional contests like
Xi’an 2006, Beijing 2007 and Wuhan 2009, or UVa OJ contests like Rujia Liu’s Presents 1
and 2), he occasionally sets easy problem (for example, ‘the Coco-Cola Store’ in UVa OJ),
to 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. To make the problem more difficult (and interesting!), you’ll have to answer m such queries.
Input There are several test cases. The first line of each test case contains two integers n, m (1 ≤ n,m ≤ 100,000), the number of elements in the array, and the number of queries. The next line contains n positive integers not larger than 1,000,000. Each of the following m lines contains two integer k and v (1 ≤ k ≤ n, 1 ≤ v ≤ 1,000,000). The input is terminated by end-of-file (EOF).
Output
For each query, print the 1-based location of the occurrence. If there is no such element, output ‘0’ instead.
Sample Input
8 4
1 3 2 2 4 3 2 1
1 3
2 4
3 2
4 2
Sample Output
2
0
7
0
题意: 给你一个长度为n的序列 m组询问 第k个v在序列中的位置
题解:水 vector 处理
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<vector> 5 using namespace std; 6 int n,m; 7 int exm; 8 vector<int> ve[1000005]; 9 int k,v; 10 int main() 11 { 12 while(scanf("%d %d",&n,&m)!=EOF) 13 { 14 for(int i=1;i<=1000000;i++) 15 ve[i].clear(); 16 for(int i=1;i<=n;i++) 17 { 18 scanf("%d",&exm); 19 ve[exm].push_back(i); 20 } 21 for(int j=1;j<=m;j++) 22 { 23 scanf("%d %d",&k,&v); 24 if(ve[v].size()<k||ve[v].size()==0) 25 cout<<"0"<<endl; 26 else 27 cout<<ve[v][k-1]<<endl; 28 } 29 } 30 return 0; 31 }