Pagini recente » Cod sursa (job #1513316) | Cod sursa (job #1889109) | Cod sursa (job #1626655) | Cod sursa (job #2083867) | Cod sursa (job #977389)
Cod sursa(job #977389)
#include <vector>
#include <cstdio>
using namespace std;
const int MAX_N = 250002;
int N, M;
int dp[MAX_N][20], F[MAX_N], log2[MAX_N];
inline int Query(int x, int k) {
while(k) {
int t = log2[k];
x = dp[x][t];
k -= (1 << t);
}
return x;
}
int main() {
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
scanf("%d %d", &N, &M);
for(int i = 1; i <= N; ++i)
scanf("%d", &F[i]), dp[i][0] = F[i];
for(int i = 2; i < MAX_N; ++i)
log2[i] = log2[i/2] + 1;
for(int j = 1; (1 << j) <= N; ++j)
for(int i = 1; i <= N; ++i) {
int x = dp[i][j-1];
dp[i][j] = dp[x][j-1];
}
for(int i = 1, x, k; i <= M; ++i) {
scanf("%d %d", &x, &k);
printf("%d\n", Query(x, k));
}
return 0;
}