Pagini recente » Cod sursa (job #2451405) | Cod sursa (job #2461209) | Cod sursa (job #3267423) | Cod sursa (job #2710256) | Cod sursa (job #1946903)
#include <stdio.h>
#include <map>
using std::map;
#define MAX_N 250000
#define MAX_LOG 17
int N, M;
int boss[MAX_LOG + 1][MAX_N + 1];
map <int, int> log;
int main() {
FILE *fin = fopen("stramosi.in", "r");
FILE *fout = fopen("stramosi.out", "w");
int i, j, u;
int P, Q;
fscanf(fin, "%d %d", &N, &M);
for (i = 1; i <= N; i++) {
fscanf(fin, "%d", &boss[0][i]);
}
log[1] = 0;
for (i = 1; i <= MAX_LOG; i++) {
log[1 << i] = i;
}
for (i = 1; i <= MAX_LOG; i++) {
for (u = 1; u <= N; u++) {
boss[i][u] = boss[i - 1][boss[i - 1][u]];
}
}
for (i = 1; i <= M; i++) {
fscanf(fin, "%d %d", &Q, &P);
while (P) {
int last_bit = P & -P;
Q = boss[log[last_bit]][Q];
P &= (P - 1);
}
fprintf(fout, "%d\n", Q);
}
return 0;
}