Pagini recente » Cod sursa (job #853286) | Cod sursa (job #1817222) | Cod sursa (job #2317280) | Cod sursa (job #2948706) | Cod sursa (job #1448619)
//0010
#include <cstdio>
int eb[250050][20];
int main() {
FILE* fi = fopen("stramosi.in", "rt");
FILE* fo = fopen("stramosi.out", "wt");
int n, m;
fscanf(fi, "%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
fscanf(fi, "%d", &eb[i][0]);
}
int aux = n, k = 0;
while (aux > 0) {
k++;
aux >>= 1;
}
for (int j = 0; j < k; j++) {
eb[0][j] = 0;
}
for (int j = 1; j < k; j++) {
for (int i = 1; i <= n; i++) {
eb[i][j] = eb[eb[i][j - 1]][j - 1];
}
}
for (int k = 1; k <= m; k++) {
int p, q;
fscanf(fi, "%d%d", &q, &p);
int v[20], kp = 0;
while (p > 0) {
v[kp] = p % 2;
p >>= 1;
kp++;
}
while (kp > 0) {
kp--;
if (v[kp] == 1) {
q = eb[q][kp];
}
}
fprintf(fo, "%d\n", q);
}
return 0;
}