Pagini recente » Cod sursa (job #480727) | Cod sursa (job #911173) | Cod sursa (job #1316571) | Cod sursa (job #2402405) | Cod sursa (job #1803815)
#include <bits/stdc++.h>
using namespace std;
#define dbg(x) (cout<<#x<<" = "<<(x)<<'\n')
typedef long long int lld;
const int INF = (1LL << 30) - 1;
const lld LINF = (1LL << 62) - 1;
const int NMAX = 250000;
const int LMAX = 18;
int N, M;
int dad[NMAX + 5][LMAX + 1];
vector<int> V[NMAX + 5];
int query(int x, int p) {
int sol = x;
for (int i = 0; i < LMAX; ++i) {
if (p & (1 << i)) {
sol = dad[sol][i];
}
}
return sol;
}
int main() {
cin.sync_with_stdio(false);
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
cin >> N >> M;
for (int i = 1, x; i <= N; ++i) {
cin >> x;
dad[i][0] = x;
}
for (int k = 1; k < 18; ++k) {
for (int i = 1; i <= N; ++i) {
dad[i][k] = dad[dad[i][k - 1]][k - 1];
}
}
while (M--) {
int x, p;
cin >> x >> p;
cout << query(x, p) << '\n';
}
return 0;
}