Pagini recente » Cod sursa (job #245786) | Cod sursa (job #1461336) | Cod sursa (job #1565974) | Cod sursa (job #2236768) | Cod sursa (job #1501428)
#include <cstdio>
using namespace std;
const int Nmax = 250000 + 1;
const int lgMax = 18;
int d[lgMax][Nmax];
int main(void) {
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
int n, m;
int u, k;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
scanf("%d", &d[0][i]);
}
for (int i = 1; (1 << i) <= n; i++) {
for (int j = 1; j <= n; j++) {
d[i][j] = d[i - 1][d[i - 1][j]];
}
}
for (int i = 0; i < m; i++) {
scanf("%d%d", &u, &k);
for (int i = 0; (1 << i) <= k; i++) {
if ((k >> i) & 1) {
u = d[i][u];
}
}
printf("%d\n", u);
}
fclose(stdin);
fclose(stdout);
return 0;
}