Pagini recente » Cod sursa (job #1319407) | Cod sursa (job #3135374) | Cod sursa (job #2889794) | Cod sursa (job #2766865) | Cod sursa (job #2520042)
#include <bits/stdc++.h>
#define Nmax 250005
using namespace std;
ifstream fin ("stramosi.in");
ofstream fout ("stramosi.out");
int h[Nmax], t[20][Nmax], n, q, x, y, lg[Nmax];
vector <int> v[Nmax];
void dfs(int x)
{
for(int k=1; (1<<k) < h[x]; k++)
t[k][x]=t[k-1][t[k-1][x]];
for(int i=0;i<v[x].size();i++)
if(h[v[x][i]]==0)
{
h[v[x][i]]=h[x]+1;
dfs(v[x][i]);
}
}
int ras(int x, int y)
{
if(y==0)
return x;
return ras(t[lg[y]][x], y-(1<<lg[y]));
}
int main()
{
fin >> n >> q;
int u=0;
for(int i=1;i<=n;i++)
{
fin >> t[0][i];
v[t[0][i]].push_back(i);
lg[i]=lg[i-1];
if(u*2==i)
{
lg[i]++;
u=i;
}
}
for(int i=1;i<=n;i++)
if(t[0][i]==0)
{
h[i]=1;
dfs(i);
}
for(int i=1;i<=q;i++)
{
fin >> x >> y;
if(y>=h[x])
fout << "0\n";
else fout << ras(x, y) << '\n';
}
return 0;
}