Pagini recente » Cod sursa (job #992009) | Cod sursa (job #2730684) | Cod sursa (job #1346416) | Cod sursa (job #2032363) | Cod sursa (job #2397163)
#include <bits/stdc++.h>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
#define NMAX 250004
#define LMAX 30
int n,m,father[LMAX][NMAX],Lg[NMAX],depth[NMAX];
int papa(int node,int x){
for(int i=0;(1<<i)<=x;i++){
if(x&(1<<i))
node=father[i][node];
}
return node;
}
int main()
{
in>>n>>m;
for(int i=1;i<=n;i++){
int a;
in>>a;
if(a)
father[0][i]=a;
}
for(int k=1;(1<<k)<=n;k++){
for(int i=1;i<=n;i++)
father[k][i]=father[k-1][father[k-1][i]];
}
for(int i=1;i<=m;i++){
int st,dr;
in>>st>>dr;
out<<papa(st,dr)<<endl;
}
return 0;
}