Pagini recente » Cod sursa (job #3157978) | Cod sursa (job #1220825) | Cod sursa (job #1484279) | Cod sursa (job #1174091) | Cod sursa (job #2862097)
#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; (1 << j) <= N; 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; (1 << j) <= N; j++) {
if(nr & (1 << j)) {
nod = up[nod][j];
}
}
printf("%d\n", nod);
}
return 0;
}