Pagini recente » Cod sursa (job #2710158) | Cod sursa (job #394804) | Cod sursa (job #2156414) | Cod sursa (job #2736072) | Cod sursa (job #3242313)
#include <fstream>
#include <vector>
int main()
{
std::ifstream cin("stramosi.in");
std::ofstream cout("stramosi.out");
int n, m;
cin >> n >> m;
int l = log2(n);
std::vector<std::vector<int> > ancestors(l + 1, std::vector<int>(n + 1, 0));
for (int i = 1; i <= n; i++)
cin >> ancestors[0][i];
// binary lifting
for (int b = 1; b <= l; b++)
{
for (int i = 1; i <= n; i++)
ancestors[b][i] = ancestors[b - 1][ancestors[b - 1][i]];
}
for (int i = 1; i <= m; i++)
{
int q, p;
cin >> q >> p;
int current = q;
for (int b = l; b >= 0; b--)
if (p & (1 << b))
current = ancestors[b][current];
cout << current << '\n';
}
return 0;
}