Pagini recente » Cod sursa (job #1256015) | Cod sursa (job #2149251) | Cod sursa (job #852600) | Cod sursa (job #1704900) | Cod sursa (job #2810444)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
#pragma GCC optimize ("Ofast")
const int maxN = 255005, maxLg = 19;
int n, nq;
int s[maxN][maxLg + 5];
vector <int> G[maxN];
void dfs(int nod)
{
for(int i = 1; i <= maxLg; i++)
s[nod][i] = s[s[nod][i - 1]][i - 1];
for(int i = 0; i < (int) G[nod].size(); i++)
dfs(G[nod][i]);
}
int main()
{
ios::sync_with_stdio(false);
fin >> n >> nq;
for(int i = 1; i <= n; i++)
{
int t;
fin >> t;
G[t].push_back(i);
s[i][0] = t;
}
dfs(0);
for(int i = 1; i <= nq; i++)
{
int nod, nr, pow = 0;
fin >> nod >> nr;
if(nr == 1)
{
fout << s[nod][0] << '\n';
continue;
}
while((1 << pow) <= nr)
pow++;
while(pow >= 0)
{
if(((1 << pow) & nr))
nod = s[nod][pow];
pow--;
}
fout << nod << '\n';
}
return 0;
}