Pagini recente » Cod sursa (job #2028963) | Cod sursa (job #1871796) | Cod sursa (job #2904286) | Cod sursa (job #3273746) | Cod sursa (job #1946837)
#include <stdio.h>
#include <map>
using std::map;
#define MAX_N 250000
#define MAX_LOG 18
int N, M;
map <int, int> lg;
int rmq[MAX_LOG + 1][MAX_N + 1];
int main(void) {
FILE *f = fopen("stramosi.in", "r");
int i, u, p;
lg[1] = 0;
for (i = 1; i <= MAX_LOG; i++) {
lg[1 << i] = i;
}
fscanf(f, "%d %d", &N, &M);
for (i = 1; i <= N; i++) {
fscanf(f, "%d", &rmq[0][i]);
}
for (i = 1; i <= MAX_LOG; i++) {
for (u = 1; u <= N; u++) {
rmq[i][u] = rmq[i - 1][rmq[i - 1][u]];
}
}
freopen("stramosi.out", "w", stdout);
while (M) {
fscanf(f, "%d %d", &u, &p);
while (p) {
u = rmq[lg[p & -p]][u];
p &= p - 1;
}
fprintf(stdout, "%d\n", u);
M--;
}
fclose(f);
fclose(stdout);
return 0;
}