Pagini recente » Cod sursa (job #837017) | Cod sursa (job #3004919) | Cod sursa (job #1843210) | Cod sursa (job #695358) | Cod sursa (job #1012822)
#include <stdio.h>
#define N 250000
#define LN 20
#define fr(i,a,b) for(int i=a;i<b;++i)
int a[LN][N];
int log[N];
int xp[N];
int query(int x,int y){
if(!x) return y;
int l=log[x];
int m=x-xp[x];
int p=a[l][y];
if(!p) return 0;
return query(m,p);
}
int main(){
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
int n,m;
bool c=true;
scanf("%i%i",&n,&m);
int x=2,y=0;
fr(i,0,n+1){
if(i==x){x*=2;++y;}
log[i]=y;
xp[i]=x>>1;
}
fr(i,1,n+1) scanf("%i",a[0]+i);
fr(j,1,LN){
c=false;
fr(i,1,n+1){
a[j][i]=a[j-1][i]?a[j-1][a[j-1][i]]:0;
if(a[j][i])c=true;
}
if(!c)break;
}
fr(i,0,m){
scanf("%i%i",&x,&y);
printf("%i\n",query(y,x));
}
return 0;
}