Pagini recente » Cod sursa (job #2388231) | Cod sursa (job #1646615) | Cod sursa (job #1494496) | Cod sursa (job #123165) | Cod sursa (job #1985446)
#include <stdio.h>
#define MAX 250005
#define NMAX 19
int n, m, x, y;
int p[NMAX][MAX];
void constr(){
int dist = 2;
int lvl = 1;
while(dist <= n){
for(int i = 1; i <= n; ++i)
p[lvl][i] = p[lvl - 1][p[lvl - 1][i]];
dist <<= 1;
++lvl;
}
}
int str(int x, int y){
int lvl = 0;
while(y){
if(y & 1)
x = p[lvl][x];
y >>= 1;
++lvl;
}
return x;
}
int main(){
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; ++i)
scanf("%d", &p[0][i]);
constr();
for(int i = 0; i < m; ++i){
scanf("%d%d", &x, &y);
printf("%d\n", str(x, y));
}
return 0;
}