Pagini recente » Cod sursa (job #1101478) | Cod sursa (job #3168665) | Cod sursa (job #1277096) | Clasament oji_andrei3 | Cod sursa (job #2988156)
#include <bits/stdc++.h>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int tata[250001],stramosi[20][250001];
void calculeaza_stramosi(int n)
{
int i,p,stramos0;
for(i=1;i<=n;i++)
{
stramosi[0][i]=tata[i];
}
for(p=1;p<20;p++)
{
for(i=1;i<=n;i++)
{
stramos0=stramosi[p-1][i];
stramosi[p][i]=stramosi[p-1][stramos0];
}
}
}
int interogare_stramos(int nod,int k)
{
int p=1,e=0;
while(2*p<=k)
{
p=p*2;
e++;
}
if(p==k)
{
return stramosi[e][nod];
}
else
{
return interogare_stramos(stramosi[e][nod],k-p);
}
}
int main()
{int n,m,i,nod,k,j;
f>>n>>m;
for(i=1;i<=n;i++)
{
f>>tata[i];
}
calculeaza_stramosi(n);
for(i=1;i<=m;i++)
{
f>>nod>>k;
g<<interogare_stramos(nod,k)<<'\n';
}
return 0;
}