Pagini recente » Cod sursa (job #99693) | Cod sursa (job #2918295) | Cod sursa (job #2762284) | Cod sursa (job #2354851) | Cod sursa (job #1448663)
//0010
#include <cstdio>
long eb[250050][20];
int main() {
FILE* fi = fopen("stramosi.in", "rt");
FILE* fo = fopen("stramosi.out", "wt");
long n = 0, m = 0;
char c;
while (true) {
c = getc(fi);
if (c < '0' || c > '9') {
break;
}
n = (n * 10) + c - '0';
}
while (true) {
c = getc(fi);
if (c < '0' || c > '9') {
break;
}
m = (m * 10) + c - '0';
}
for (long i = 1; i <= n; i++) {
eb[i][0] = 0;
while (true) {
c = getc(fi);
if (c < '0' || c > '9') {
break;
}
eb[i][0] = eb[i][0] * 10 + c - '0';
}
}
long aux = n, k = 0;
while (aux > 0) {
k++;
aux >>= 1;
}
for (long j = 0; j < k; j++) {
eb[0][j] = 0;
}
for (long j = 1; j < k; j++) {
for (long i = 1; i <= n; i++) {
eb[i][j] = eb[eb[i][j - 1]][j - 1];
}
}
for (long j = k; j < 20; j++) {
for (long i = 1; i <= n; i++) {
eb[i][j] = 0;
}
}
for (long k = 1; k <= m; k++) {
long p = 0, q = 0;
while (true) {
c = getc(fi);
if (c < '0' || c > '9') {
break;
}
q = q * 10 + c - '0';
}
while (true) {
c = getc(fi);
if (c < '0' || c > '9') {
break;
}
p = p * 10 + c - '0';
}
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, "%ld\n", q);
}
return 0;
}