Pagini recente » Cod sursa (job #1245928) | Cod sursa (job #692674) | Cod sursa (job #233447) | Cod sursa (job #2159531) | Cod sursa (job #744339)
Cod sursa(job #744339)
#include <cassert>
#include <cstdio>
const int nmax=250000, n2max=18;
int f[n2max+1][nmax+1];
int main(){
int n, m;
assert(freopen("stramosi.in", "r", stdin));
assert(scanf(" %d %d ", &n, &m));
for (int i=1; i<=n; ++i){
assert(scanf(" %d ", &f[0][i]));
}
for (int i=1; (1<<i)<=n; ++i){
fprintf(stderr, "%d:", (1<<i));
for (int j=1; j<=n; ++j){
f[i][j]=f[i-1][f[i-1][j]];
fprintf(stderr, " %d", f[i][j]);
}
fprintf(stderr, "\n");
}
assert(freopen("stramosi.out", "w", stdout));
for (; m; --m){
int x, y;
assert(scanf(" %d %d", &x, &y));
for (int i=0; (1<<i)<=y; ++i){
if ((1<<i)&y){
x=f[i][x];
}
}
printf("%d\n", x);
}
fclose(stdin);
fclose(stdout);
return 0;
}