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
ac代码:
#include<stdio.h>
#include<string.h>
#include<vector>
#include<iostream>
#include<set>
#include<map>
#include<queue>
#include<ctype.h>
#include<stack>
#include<math.h>
#include <string>
#include<algorithm>
using namespace std;
typedef unsigned long long ULL;
vector<int> v[1000005];
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n,m;
int k,x;
while(cin>>n>>m)
{
for(int i=0;i<=1000000;i++)
v[i].clear();
int a;
for(int i=1;i<=n;i++)
{
cin>>a;
v[a].push_back(i);
}
while(m--)
{
cin>>k>>x;
int ans;
if(v[x].size()<k)
ans=0;
else
ans=v[x][k-1];
cout<<ans<<endl;
}
}
return 0;
}