Pagini recente » Cod sursa (job #1333268) | Cod sursa (job #985053) | Cod sursa (job #1748780) | Cod sursa (job #1808925) | Cod sursa (job #2940969)
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int DIM = 250005;
const int MAX_EXP = 17;
int n, m;
int dp[DIM][20];
int ancestor(int node, int cnt) {
for (int exp = 17; exp >= 0; exp--) {
if ((1 << exp) <= cnt) {
cnt -= (1 << exp);
node = dp[node][exp];
}
}
return node;
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++)
fin >> dp[i][0];
for (int exp = 1; exp <= MAX_EXP; exp++)
for (int i = 1; i <= n; i++)
dp[i][exp] = dp[dp[i][exp - 1]][exp - 1];
for (int i = 1; i <= m; i++) {
int q, p;
fin >> q >> p;
fout << ancestor(q, p) << '\n';
}
fin.close();
fout.close();
return 0;
}