Pagini recente » Cod sursa (job #2176262) | Cod sursa (job #1549692) | Cod sursa (job #662890) | Cod sursa (job #1635043) | Cod sursa (job #1781919)
#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 main() {
int n, m, a, b;
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 >> 1];
fscanf(fin, "%d", &d[0][i]);
}
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);
while(b > 0) {
a = d[log[b]][a];
b = b - (1 << log[b]);
}
fprintf(fout, "%d\n", a);
}
fclose(fin);
fclose(fout);
return 0;
}