Pagini recente » Cod sursa (job #1860409) | Cod sursa (job #1496381) | Cod sursa (job #989412) | Cod sursa (job #2384980) | Cod sursa (job #1114451)
#include <algorithm>
#include <iostream>
#include <fstream>
using namespace std;
const int MAX_N = 250005;
int ancestor[20][MAX_N];
inline int solve(int p, int node) {
//cout << "Getting for " << node << ":\n";
for(int pace = 19; pace >= 0; -- pace) {
if(p >= (1 << pace)) {
p -= (1 << pace);
node = ancestor[pace][node];
//cout << pace << " " << node << "\n";
}
}
return node;
}
int main() {
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, m;
fin >> n >> m;
for(int i = 1; i <= n; ++ i) {
fin >> ancestor[0][i];
}
for(int i = 1; (1 << i) <= n; ++ i) {
for(int j = 1; j <= n; ++ j) {
ancestor[i][j] = ancestor[i - 1][ancestor[i - 1][j]];
}
}
for(int i = 1; i <= m; ++ i) {
int p, q;
fin >> p >> q;
fout << solve(q, p) << "\n";
}
return 0;
}