Pagini recente » Cod sursa (job #3244688) | Cod sursa (job #2324615) | Cod sursa (job #1989447) | Cod sursa (job #2323588) | 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;
}