Pagini recente » Cod sursa (job #2303040) | Cod sursa (job #1220176) | Cod sursa (job #2007307) | Cod sursa (job #170087) | Cod sursa (job #2922995)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream fin ("stramosi.in");
ofstream fout ("stramosi.out");
const int NMAX=250005;
const int NMAX1=20;
int t[NMAX1][NMAX];
int ancestor(int q,int p)
{
int kon=0;
while(p!=0)
{
if(p%2!=0)
q=t[kon][q];
p=(p>>1);
kon++;
}
return q;
}
int main()
{
int n,m,i,j,lung,x,q,p;
fin>>n>>m;
for(i=1;i<=n;i++)
{
fin>>x;
t[0][i]=x;
}
lung=(int(log2(n)));
for(i=1;i<=lung;i++)
for(j=1;j<=n;j++)
t[i][j]=t[i-1][t[i-1][j]];
for(i=1;i<=m;i++)
{
fin>>q>>p;
fout<<ancestor(q,p)<<"\n";
}
return 0;
}