Pagini recente » Cod sursa (job #1335157) | Cod sursa (job #1037337) | Cod sursa (job #227881) | Cod sursa (job #1805140) | Cod sursa (job #1448607)
//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);
while (p > 0) {
aux = p;
int kp = 0, put = 1;
while (aux > 0) {
kp++;
aux >>= 1;
put <<=1;
}
p -= put / 2;
q = eb[q][kp - 1];
if (q == 0) {
break;
}
}
fprintf(fo, "%d\n", q);
}
return 0;
}