Pagini recente » Cod sursa (job #2523633) | Cod sursa (job #1837426) | Cod sursa (job #773427) | tema | Cod sursa (job #218497)
Cod sursa(job #218497)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define FIN "stramosi.in"
#define FOUT "stramosi.out"
#define N 250001
#define LOG 20
int a[LOG][N],n,m,b2[1001],r;
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 scan(void){
int i;
freopen(FIN,"r",stdin);
freopen(FOUT,"w",stdout);
scanf("%d%d\n",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&a[0][i]);
}
void solve(void){
int i,j,k,logN;
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]];
while(m--){
scanf("%d%d",&i,&j);
k=ancestor(i,j);
printf("%d\n",k);
}
}
void print(void){
fclose(stdin);
fclose(stdout);
exit(0);
}
int main(void){
scan();
solve();
print();
}