Pagini recente » Cod sursa (job #1558865) | Cod sursa (job #2373760) | Cod sursa (job #1803872) | Cod sursa (job #1219019) | Cod sursa (job #2511677)
#include <cstdio>
#include <vector>
#include <cmath>
using namespace std;
const int NMAX = 250000;
int t[NMAX + 5] , d[NMAX + 5][25] , n;
void dinamica()
{
int i , j;
for(i = 1 ; i <= n ; i ++)
d[i][0] = i;
for(j = 1 ; (1 << j) <= n ; j ++)
for(i = 1 ; i <= n ; i ++)
d[i][j] = d[t[d[i][j - 1]]][j - 1];
}
int query(int x , int y)
{
int j;
j = 0;
for( ; y ; y = (y >> 1))
{
if(y & 1)
x = t[d[x][j]];
j ++;
}
return x;
}
int main()
{
freopen("stramosi.in" , "r" , stdin);
freopen("stramosi.out" , "w" , stdout);
int q , i , x , y;
scanf("%d%d" , &n , &q);
for(i = 1 ; i <= n ; i ++)
scanf("%d" , &t[i]);
dinamica();
for(i = 1 ; i <= q ; ++ i)
{
scanf("%d%d" , &x , &y);
printf("%d\n" , query(x , y));
}
return 0;
}