Pagini recente » Cod sursa (job #2899567) | Cod sursa (job #1128447) | Cod sursa (job #2712844) | Cod sursa (job #490703) | Cod sursa (job #1326764)
#include <fstream>
#include <cstring>
#include <cmath>
#define fin "stramosi.in"
#define fout "stramosi.out"
#define Nmax 250001
#define logNmax 20
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int a[logNmax][Nmax],N,M,b2[1001],r;
FILE *fi,*fo;
int ancestor(int x)
{
int i,u;
for(i=r;i>0;i--)
if(b2[i])
u=a[i-1][x], x=u;
return u;
}
int ancestor(int q,int p){
int x=q,r,j=0;
while(p){
r=p&1;
if(r)
x=a[j][x];
j++;
p>>=1;
}
return x;
}
void solve()
{
int i,j,k,logN;
f>>N>>M;
for(i=1;i<=N;i++) f>>a[0][i];
logN=ceil(log(N)/log(2));
for(k=1;k<=logN;k++)
for(i=1;i<=N;i++)
a[k][i]=a[k-1][a[k-1][i]];
for(;M;M--)
{
//memset(b2,0,sizeof(b2));
f>>i>>j;
//for(r=0;j;j/=2) b2[++r]=j%2;
k=ancestor(i,j), g<<k<<'\n';
}
}
int main()
{
solve();
return 0;
}