Pagini recente » Cod sursa (job #3123179) | Cod sursa (job #1756107) | Cod sursa (job #365122) | Cod sursa (job #872194) | Cod sursa (job #3212597)
#include <fstream>
#include <vector>
#include <algorithm>
#include <string>
#include <stack>
#include <set>
using namespace std;
#define int long long
#define watch(x) cerr << "\n" << (#x) << " is " << (x) << endl
#define all(x) x.begin(), x.end()
const string taskname("stramosi");
ifstream cin(taskname + ".in");
ofstream cout(taskname + ".out");
const int MAX_N = 250004;
const int MAX_N_LOG_2 = 18;
int n, Q;
int arb[MAX_N_LOG_2][MAX_N];
int32_t main() {
cin >> n >> Q;
for (int i = 0; i < n; i++) {
int x;
cin >> x;
x--;
arb[0][i] = x;
}
for (int i = 1; i < MAX_N_LOG_2; i++) {
for (int j = 0; j < n; j++) {
int anc = arb[i - 1][j];
if (anc == -1) arb[i][j] = -1;
else {
arb[i][j] = arb[i - 1][anc];
}
}
}
int q,p = 0;
for (int i = 0; i < Q; i++) {
cin >> q >> p;
q--;
for (int j = 0; p && q != -1; j++, p >>= 1) {
if (p & 1) {
q = arb[j][q];
}
}
cout << (q + 1) << '\n';
}
}