Pagini recente » Cod sursa (job #161285) | Cod sursa (job #2014410) | Cod sursa (job #43864) | Cod sursa (job #1696468) | Cod sursa (job #2669849)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int n, q;
int v[250100], log2[250100], tree[20][250100];
int ancestor(int nod, int cont)
{
int x = nod;
while(cont)
{
x = tree[log2[cont]][x];
cont -= (1 << log2[cont]);
}
return x;
}
int main()
{
in >> n >> q;
for(int i = 1; i <= n; i++)
in >> tree[0][i];
log2[1] = 0;
for(int i = 2; i <= n; i++)
log2[i] = log2[i / 2] + 1;
for(int p = 1; (1 << p) <= n; p++)
{
//cout << "POWER: " << p << '\n';
for(int i = 1; i <= n; i++)
{
tree[p][i] = tree[p - 1][tree[p - 1][i]];
//cout << i << ' ' << tree[p][i] << '\n';
}
//cout << "\n\n";
}
while(q--)
{
int x, y;
in >> x >> y;
out << ancestor(x, y) << '\n';
}
return 0;
}