Pagini recente » Cod sursa (job #1104644) | Cod sursa (job #1018141) | Cod sursa (job #3002607) | Cod sursa (job #838199) | Cod sursa (job #3285690)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("stramosi.in");
ofstream fout ("stramosi.out");
int const lmax=250007;
vector <int> G[lmax];
int t[lmax],log2_[lmax];
int P[27][lmax];
int n,nrq,reznode=-1;
void solve(int node, int dist)
{
if(dist==0)
{
reznode=node;
return;
}
else if(dist==1)
{
reznode=t[node];
return;
}
else
{
int aux=log2_[dist];///cel mai mare bit unu din reprezentarea binara al lui dist
solve(P[aux][node],dist-(1<<aux));
}
}
int main()
{
fin>>n>>nrq;
for(int i=1;i<=n;i++)
{
fin>>t[i];
G[i].push_back(t[i]);
G[t[i]].push_back(i);
P[0][i]=t[i];
}
for(int i=1;i<=n;i++)
{
for(int j=1;(1<<j)<=n;j++)
{
P[j][i]=P[j-1][P[j-1][i]];
}
}
for(int i=2;i<=n;i++)
{
log2_[i]=1+log2_[i>>1];
}
for(int i=0;i<nrq;i++)
{
int node,dist;
fin>>node>>dist;
solve(node,dist);
fout<<reznode<<"\n";
}
fin.close();
fout.close();
return 0;
}