Pagini recente » Cod sursa (job #1644079) | Cod sursa (job #2541864) | Cod sursa (job #2613689) | Cod sursa (job #35295) | Cod sursa (job #1815577)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int n,m;
int a[25002][25];
void build()
{
for(int i=1; i<=n; i++)
{
int x;
in>>x;
a[i][1]=x;
for(int j=2; j<30; j++)
{
if(a[a[i][j-1]][j-1]!=0)
{
a[i][j]=a[a[i][j-1]][j-1];
}
else
{
break;
}
}
}
}
int pow(int x)
{
int i;
for(i=1; i<=x; i=i*2)
{}
i=i/2;
return i;
}
int detaux(int x)
{
int k=0;
while(x!=0)
{
k++;
x=x/2;
}
return k;
}
int solve(int p,int q)
{
int sol;
int power=pow(p);
p-=power;
int aux=detaux(power);
if(p==0)
return a[q][aux];
else if(a[q][aux]==0)
return 0;
else if(a[q][aux]!=0)
{
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';
}
}