Pagini recente » Cod sursa (job #780036) | Cod sursa (job #1201888) | Cod sursa (job #22586) | Cod sursa (job #179649) | Cod sursa (job #1416804)
#include <cstdio>
using namespace std;
#define inFile "stramosi.in"
#define outFile "stramosi.out"
#define MAX_N 250001
#define MAX_LOG 19
FILE *in = fopen(inFile, "r");
FILE *out = fopen(outFile, "w");
int ancestor[MAX_LOG][MAX_N];
inline int getAnc(int anc, int node) {
int i, currAnc = node;
for(i = 0; (1<<i) <= anc; i++) {
if(anc & (1<<i)) {
currAnc = ancestor[i][currAnc];
}
}
return currAnc;
}
int main() {
int N, M, anc, node;
register int i, j;
fscanf(in, "%d %d", &N, &M);
for(i = 1; i <= N; i++)
fscanf(in, "%d", &ancestor[0][i]);
for(i = 1; i < MAX_LOG; i++) {
for(j = 1; j <= N; j++) {
ancestor[i][j] = ancestor[0][getAnc((1<<i)-1, j)];
}
}
for(i = 1; i <= M; i++) {
fscanf(in, "%d %d", &node, &anc);
fprintf(out, "%d\n", getAnc(anc, node));
}
fclose(in);
fclose(out);
return 0;
}