Pagini recente » Cod sursa (job #1509523) | tema | Cod sursa (job #759587) | Cod sursa (job #1678822) | Cod sursa (job #198865)
Cod sursa(job #198865)
#include <stdio.h>
#define N 250001
#define LOG 20
int n,m,b[LOG][N],c=0;
int log(int x){
int c=0;
while(x!=1){
x/=2;
c++;
}
return c;
}
void gen(){
int i,j,lg;
lg=log(n);
for(i=1;i<=lg;i++)
for(j=1;j<=n;j++)
b[i][j]=b[i-1][b[i-1][j]];
}
int raspunde(int x,int y){//returneaza stramosul x al lui y
int i=0;
while(y){
if(y%2)
x=b[i][x];
y/=2;
++i;
}
return x;
}
void intrebari(){
int i,p,q;
for(i=1;i<=m;i++){
scanf("%d%d",&q,&p);
c=0;
printf("%d\n",raspunde(q,p));
}
}
int main(){
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d",&n,&m);
for(int j=1;j<=n;j++)
scanf("%d",&b[0][j]);
gen();
intrebari();
return 0;
}