Pagini recente » Cod sursa (job #1789101) | Cod sursa (job #2733706) | Cod sursa (job #638267) | Cod sursa (job #2616053) | Cod sursa (job #1715677)
#include <fstream>
#include <vector>
#include <iostream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
vector <int>v[250005];
int x,y,n,m,i,j,s[250005],d[250005],k,x1,r,k1,ct,i1;
int main()
{fin>>n>>m;
for(i=1;i<=n;i++)
{fin>>s[i];
d[i]=d[s[i]]+1;
k=2;v[i].push_back(i);
v[i].push_back(s[i]);
i1=s[i];
ct=1;
while(k<=d[i]-1)
{ct++;
v[i].push_back(v[i1][ct-1]);
k=k*2;
i1=v[i1][ct-1];
}
}
for(j=1;j<=m;j++)
{fin>>x>>y;
x1=x+y;
r=x;
if(y>d[x]-1)fout<<"0\n";
else{
while(x<x1)
{k1=x1-x;
k=1;
ct=1;
while(k<=k1)
{k=k*2;
ct++;
}
ct--;
k=k/2;
r=v[r][ct];
x=x+k;
}
fout<<r<<"\n";
}
}
}