Solução Problema Fácil de Rujia Liu?

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.


#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;
}

view raw

liu.cpp

hosted with ❤ by GitHub