Easy problem from Rujia Liu?
| Time Limit: 1000MS |
|
Memory Limit: Unknown |
|
64bit IO Format: %lld &%llu |
Submit Status
Description problem E easy 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 4
1 3 2 2 4 3 2 1
1 3
2 4
3 2
4 2
Output for the Sample Input
2
0
7
0
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!
Analysis: Rujia The simple questions in the Great White Book. Is the use of map,vector containers. Used to familiarize yourself with the map container. AC Code: #include <iostream>
#include <cstdio>
#include <vector>
#include <map>
using namespace Std;
Map<int,vector<int> >a;
int main ()
{
int n,m,k,v,x;
while (scanf ("%d%d", &n,&m)!=eof)
{
A.clear ();
for (int i=1;i<=n;i++)
{
scanf ("%d", &x);
if (!a.count (x))
A[x]=vector<int> ();//create a new vector.
A[x].push_back (i);
}
while (m--)
{
scanf ("%d%d", &k,&v);
if (!a.count (v) | | A[v].size () <k)
printf ("0\n");
Else
printf ("%d\n", a[v][k-1]);
}
}
return 0;
}