Pagini recente » Cod sursa (job #2003458) | Cod sursa (job #479025) | Cod sursa (job #636992) | Cod sursa (job #2077618) | Cod sursa (job #2862091)
#include <iostream>
#define NMAX 250003
#define LOG 18
using namespace std;
int N, M;
int Fathers[NMAX];
int up[NMAX][LOG];
int main()
{
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
cin >> N >> M;
for(int i = 1; i <= N; i++) {
int f;
scanf("%d", &f);
Fathers[i] = f;
}
for(int i = 1; i <= N; i++) {
up[i][0] = Fathers[i];
}
for(int j = 1; j < LOG; j++) {
for(int i = 1; i <= N; i++) {
up[i][j] = up[up[i][j - 1]][j - 1];
}
}
for(int i = 1; i <= M; i++) {
int nod, nr;
scanf("%d %d", &nod, &nr);
for(int j = 0; j < LOG; j++) {
if(nr & (1 << j)) {
nod = up[nod][j];
}
}
printf("%d\n", nod);
}
return 0;
}