Pagini recente » Cod sursa (job #2788468) | Cod sursa (job #620029) | Cod sursa (job #1289560) | Cod sursa (job #2833709) | Cod sursa (job #2866454)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int nmax = 250005;
int n, m, Log;
int dp[nmax][20], tata[nmax];
void precalc()
{
for(int i = 1; i <= n; i ++)
{
dp[i][0] = tata[i];
for(int j = 1; j <= 18; j ++)
dp[i][j] = dp[ dp[i][j - 1] ][j - 1];
}
}
int get_ancestor(int nod, int nr)
{
for(int i = 18; i >= 0; i --)
{
if(nr >= (1 << i))
{
nod = dp[nod][i];
nr -= (1 << i);
}
}
return nod;
}
int main()
{
fin >> n >> m;
for(int i = 1; i <= n; i ++)
fin >> tata[i];
precalc();
int p, q;
while(m--)
{
fin >> p >> q;
fout << get_ancestor(p, q) << '\n';
}
return 0;
}