Pagini recente » Cod sursa (job #569797) | Cod sursa (job #171771) | Cod sursa (job #2209897) | Cod sursa (job #2435726) | Cod sursa (job #2397627)
#include <bits/stdc++.h>
using namespace std;
int D[250005][18];
int log(int n) {
int res = 0;
while (n) {
++res;
n >>= 1;
}
return res;
}
int main() {
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
int n, q;
scanf("%d %d", &n, &q);
for (int i = 1; i <= n; ++i) {
scanf("%d", &D[i][0]);
}
int logN = log(n);
for (int j = 1; j < logN; ++j) {
for (int i = 1; i <= n; ++i) {
D[i][j] = D[D[i][j-1]][j-1];
}
}
while (q--) {
int x, p;
scanf("%d %d", &x, &p);
int pwr = 0;
while (p && x) {
if (p & 1) {
x = D[x][pwr];
}
++pwr;
p >>= 1;
}
printf("%d\n", x);
}
return 0;
}