Pagini recente » Cod sursa (job #1621532) | Cod sursa (job #2932804) | Cod sursa (job #1766907) | Cod sursa (job #510771) | Cod sursa (job #1781900)
#include <cstdio>
const int MAX_N = 250000;
const int MAX_LOG = 18;
int d[1+MAX_N][1+MAX_LOG];
int log[1+MAX_N];
int stramos(int a, int b) {
while(b > 0) {
a = d[a][log[b]];
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[i][0] = x;
}
for(int i = 1; i <= MAX_LOG; i++)
for(int j = 1; j <= n; j++)
d[j][i] = d[d[j][i - 1]][i - 1];
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;
}