Pagini recente » Cod sursa (job #1937110) | Cod sursa (job #1024947) | Cod sursa (job #1369943) | Cod sursa (job #229939) | Cod sursa (job #1815596)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int n,m;
int z;
int a[250002][25];
int log[250003];
void build()
{
for(int i=1; i<=n; i++)
{
int x;
in>>x;
a[i][1]=x;
for(int j=2; j<19; j++)
{
if(a[a[i][j-1]][j-1]!=0)
{
a[i][j]=a[a[i][j-1]][j-1];
}
else
{
break;
}
}
}
for(int i = 2; i <= 250001; ++i)
log[i] = log[i/2] + 1;
}
int pow(int x)
{
int i;
z=1;
for(i=1; i<=x; i=i*2)
{z++;}
z=z-1;
i=i/2;
return i;
}
int solve(int p,int q)
{
int sol;
int power=(1<<(log[p]));
int aux=log[p*2];
p-=power;
if(p==0)
return a[q][aux];
else if(a[q][aux]==0)
return 0;
else
{
q=a[q][aux];
sol=solve(p,q);
}
return sol;
}
int main()
{
in>>n>>m;
build();
for(int i=1; i<=m; i++)
{
int p,q;
in>>q>>p;
out<<solve(p,q)<<'\n';
}
}