Pagini recente » Cod sursa (job #542566) | Cod sursa (job #2641264) | Cod sursa (job #352150) | Cod sursa (job #2847124) | Cod sursa (job #1781894)
#include <cstdio>
const int MAX_N = 250000;
const int MAX_LOG = 18;
int d[1+MAX_LOG][1+MAX_N];
int log[1+MAX_N];
int stramos(int a, int b) {
while(b > 0) {
a = d[log[b]][a];
b = b - (1 << log[b]);
}
return a;
}
int main() {
int n, m, a, b, x;
FILE *fin = fopen("stramosi.in", "r");
fscanf(fin, "%d%d", &n, &m);
for(int i = 1; i <= n; ++i) {
if(i >= 2)
log[i] = log[i / 2];
fscanf(fin, "%d", &x);
d[0][i] = x;
}
for(int i = 1; i <= MAX_LOG; i++)
for(int j = 1; j <= n; j++)
d[i][j] = d[i - 1][d[i - 1][j]];
FILE *fout = fopen("stramosi.out", "w");
for(int i = 0; i < m; i++) {
fscanf(fin, "%d%d", &a, &b);
fprintf(fout, "%d\n", stramos(a, b));
}
fclose(fin);
fclose(fout);
return 0;
}