Pagini recente » Cod sursa (job #2719080) | Cod sursa (job #2951413) | Cod sursa (job #883572) | Cod sursa (job #985041) | Cod sursa (job #1448631)
//0010
#include <cstdio>
int eb[250050][20];
int main() {
FILE* fi = fopen("stramosi.in", "rt");
FILE* fo = fopen("stramosi.out", "wt");
int n = 0, m = 0;
//fscanf(fi, "%d%d", &n, &m);
char c;
while (true) {
c = fgetc(fi);
if (c < '0' || c > '9') {
break;
}
n = (n * 10) + c - '0';
}
while (true) {
c = fgetc(fi);
if (c < '0' || c > '9') {
break;
}
m = (m * 10) + c - '0';
}
for (int i = 1; i <= n; i++) {
// fscanf(fi, "%d", &eb[i][0]);
eb[i][0] = 0;
while (true) {
c = fgetc(fi);
if (c < '0' || c > '9') {
break;
}
eb[i][0] = eb[i][0] * 10 + c - '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 = 0, q = 0;
// fscanf(fi, "%d%d", &q, &p);
while (true) {
c = fgetc(fi);
if (c < '0' || c > '9') {
break;
}
q = q * 10 + c - '0';
}
while (true) {
c = fgetc(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, "%d\n", q);
}
return 0;
}