Pagini recente » Cod sursa (job #1184062) | Cod sursa (job #83386) | Cod sursa (job #3231828) | Cod sursa (job #238792) | Cod sursa (job #1402100)
#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, kAnc, node;
in >> n >> m;
for(i = 1; i <= n; i++)
in >> anc[0][i];
for(i = 1; (1<<i) <= n; i++) {
for(j = 1; j <= n; j++) {
anc[i][j] = anc[0][getAncestor(1<<(i-1), j)];
}
}
for(i = 1; i <= m; i++) {
in >> node >> kAnc;
out << getAncestor(kAnc, node) << '\n';
}
return 0;
}
int getAncestor(int k, int node) {
int i, currAnc = node;
for(i = 0; (1<<i) <= k; i++)
if((1<<i) & k) currAnc = anc[i][currAnc];
return currAnc;
}