Pagini recente » Cod sursa (job #2894689) | Cod sursa (job #2406634) | Cod sursa (job #2894694) | Cod sursa (job #2450097) | Cod sursa (job #2397157)
#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];
vector<int>g[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;
g[father[0][i]].push_back(i);}
}
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;
}