Pagini recente » Cod sursa (job #1512217) | Cod sursa (job #1258833) | Cod sursa (job #2626538) | Cod sursa (job #1237133) | Cod sursa (job #1448673)
//0010
#include <cstdio>
long eb[20][250050];
int main() {
FILE* fi = fopen("stramosi.in", "rt");
FILE* fo = fopen("stramosi.out", "wt");
long n = 0, m = 0;
fscanf(fi, "%ld%ld", &n, &m);
for (long i = 1; i <= n; i++) {
fscanf(fi, "%ld", &eb[0][i]);
}
long aux = n, k = 0;
while (aux > 0) {
k++;
aux >>= 1;
}
for (long i = 0; i < k; i++) {
eb[i][0] = 0;
}
for (long i = 1; i < k; i++) {
for (long j = 1; j <= n; j++) {
eb[i][j] = eb[i - 1][eb[i - 1][j]];
}
}
for (long w = 1; w <= m; w++) {
long p = 0, q = 0;
fscanf(fi, "%ld%ld", &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[kp][q];
}
}
fprintf(fo, "%ld\n", q);
}
return 0;
}