Pagini recente » Cod sursa (job #242726) | Cod sursa (job #2310282) | Cod sursa (job #934956) | Cod sursa (job #327284) | Cod sursa (job #3184720)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int maxn = 25e4, maxlog = 18;
int parrent[maxn + 1], lift[maxn + 1][maxlog];
vector<int> children[maxn + 1];
int main() {
int n, m;
fin >> n >> m;
for (int i = 1; i <= n; i++) {
int x;
fin >> x;
parrent[i] = x;
}
for (int i = 1; i <= n; i++)
lift[i][0] = parrent[i];
for (int j = 1; j < maxlog; j++)
for (int i = 1; i <= n; i++)
lift[i][j] = lift[lift[i][j - 1]][j - 1];
for (int i = 0; i < m; i++) {
int q, p;
fin >> q >> p;
int answer = q;
while (p > 0) {
int poz = 31 - __builtin_clz(p);
//cout << poz << endl;
answer = lift[answer][poz];
p ^= (1<<poz);
}
//cout << endl;
fout << answer << '\n';
}
return 0;
}