Pagini recente » Istoria paginii utilizator/filipdaria | Profil razvanbecia | Profil penteSorin | Diferente pentru eliminare-gaussiana intre reviziile 24 si 23 | Cod sursa (job #199045)
Cod sursa(job #199045)
#include <stdio.h>
#define N 250001
#define LOG 20
int m,n,b[LOG][N],c;
int log(int x){
int nr=0;
while(x!=1){
x/=2;
nr++;
}
return nr;
}
int raspunde(int x, int y){
c=0;
while(x){
if(x%2) y=b[c][y];
x/=2;
c++;
}
return y;
}
void gen(){
int lg=log(n);
for(int i=1;i<=lg;i++)
for(int j=1;j<=n;j++)
b[i][j]=b[i-1][b[i-1][j]];
}
int main(){
int i,p,q;
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
scanf("%d",&b[0][i]);
gen();
for(i=1;i<=m;i++){
scanf("%d%d",&q,&p);
printf("%d\n",raspunde(p,q));
}
return 0;
}