Pagini recente » Cod sursa (job #140785) | Cod sursa (job #2725822) | Cod sursa (job #1142620) | Cod sursa (job #2538094) | Cod sursa (job #2805692)
#include <fstream>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int n, m, a[20][250001], lg2[250001];
void read()
{
in >> n >> m;
for(int i = 1; i <= n; ++i)
in >> a[0][i];
}
void prec()
{
for(int i = 2; i <= n; ++i)
lg2[i] = lg2[i/2] + 1;
for(int i = 1; (1<<i) <= n; ++i)
for(int j = 1; j <= n; ++j)
a[i][j] = a[i-1][a[i-1][j]];
}
int ancestor(int p, int q)
{
int k;
while(p)
{
k = lg2[p];
p -= (1<<k);
q = a[k][q];
}
return q;
}
void afis()
{
int q, p;
while(m--)
in >> q >> p,
out << ancestor(p, q) << '\n';
}
int main()
{
read();
prec();
afis();
return 0;
}