Solução por João Guilherme.
Bem, o que queremos é para cada valor a, guardar qual a posição da i-ésima vez que ele aparece, para isso basta termos um array de vectors, onde cada vector guarda as posições em que o índice do vector no array apareceu. Então para cada query nós imprimimos 0, se a k for maior que o número de vezes que nosso número aparece ou então imprimimos o (k-1)-ésimo elemento do nosso vector.
Segue o código para melhor entendimento.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <cstdio> | |
#include <cstdlib> | |
#include <vector> | |
#define MAXN 1000010 | |
using namespace std; | |
vector <int> G[MAXN]; | |
int main(){ | |
int n, m, k, v, a; | |
while(scanf("%d%d", &n, &m) != EOF){ | |
for(int i = 1; i<=MAXN; i++) | |
G[i].clear(); | |
for(int i = 1; i <= n; i++){ | |
scanf("%d", &a); | |
G[a].push_back(i); | |
} | |
for(int i = 1; i <= m; i++){ | |
scanf("%d%d", &k, &v); | |
k--; | |
if(k >= G[v].size()) | |
printf("0\n"); | |
else | |
printf("%d\n", G[v][k]); | |
} | |
} | |
return 0; | |
} |