Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save nomarlo/65e600bba183c87417d522fa01351a81 to your computer and use it in GitHub Desktop.
Save nomarlo/65e600bba183c87417d522fa01351a81 to your computer and use it in GitHub Desktop.
/**
La idea es representar como una lista de adjacencia el número (n)(el número n esta mapeado para ahorrar espacio) y sus aparaciones en el arreglo
eje: 1 5 8 9 5 4 5
5: 2 5 7
**/
#include <iostream>
#include <cmath>
#include <algorithm>
#include <queue>
#include <stack>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <cstdio>
using namespace std;
//typedef pair<int,int> ii;//(valor,posicion)
typedef vector<int> vi;
struct compare
{
bool operator()(const int& l, const int& r)
{
return l > r;
}
};
int n,m; //fila y columnas
//vector <vii> G2;//la transpuesta de la matriz M
int k,v;
int num;
int main(){
while(scanf("%d %d",&n,&m)!=EOF){
map <int,int>M;
vector <vi> G;
//incializamos ambos vectores
//G.assign(r,vii());
//Asignamos un elemento para que G[0] sea vacio
vi a;
G.push_back(a);
for(int i=1;i<=n;i++){
scanf("%d",&num);
if(M[num]==0){
M[num]=G.size();
vi a;
a.push_back(i);
G.push_back(a);
}
else{
G[M[num]].push_back(i);
}
}
while(m--){
scanf("%d %d",&k,&v);
if(M[v]==0){
printf("0\n");
}
else{
printf("%d\n",G[M[v]].size()<k?0:G[M[v]][k-1]);
}
}
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment