Pagini recente » Cod sursa (job #2512771) | Cod sursa (job #2213354) | Cod sursa (job #2697806) | Cod sursa (job #131395) | Cod sursa (job #1402082)
#include <fstream>
#include <algorithm>
using namespace std;
#define inFile "stramosi.in"
#define outFile "stramosi.out"
#define MAX_N 250001
#define MAX_LOG 20
int anc[MAX_LOG][MAX_N];
int getAncestor(int k, int node);
int main() {
ifstream in(inFile);
ofstream out(outFile);
int n, m, i, j, P, Q;
in >> n >> m;
for(i = 1; i <= n; i++)
in >> anc[0][i];
for(i = 1; i < MAX_LOG; i++) {
for(j = 1; j <= n; j++) {
anc[i][j] = anc[0][getAncestor(1<<(i-1), j)];
}
}
for(i = 1; i <= m; i++) {
in >> P >> Q;
out << getAncestor(Q, P) << '\n';
}
return 0;
}
int getAncestor(int k, int node) {
int i, currAnc = node;
for(i = 0; i < MAX_LOG; i++) {
if((1<<i) & k) currAnc = anc[i][currAnc];
}
return currAnc;
}