Pagini recente » Cod sursa (job #2179950) | Cod sursa (job #1701484) | Cod sursa (job #853140) | Cod sursa (job #785977) | Cod sursa (job #1547552)
#include <iostream>
#include <fstream>
#include <string.h>
//#include <vector>
//#include <queue>
//#include <algorithm>
using namespace std;
const int nmax = 250002;
int n,v[20][nmax]; // ficare linie va fi 2^k-stramos 2^19 > 250.000
void calculate(){
int i, j;
for (i = 1; i < 20; i++)
for (j = 1; j <= n; j++)
v[i][j] = v[i - 1][v[i - 1][j]];
}
int query(int nod, int putere) {
int nd = nod;
for (int i = 0; i < 20; i++)
if ((putere >> i) & 1)
nd = v[i][nd];
return nd;
}
int main(){
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
int m;
scanf("%d %d", &n, &m);
v[0][0] = 0;
for (int i = 1; i <= n; i++)
scanf("%d", &v[0][i]);
calculate();
int a, b;
for (; m--;){
scanf("%d %d", &a, &b);
printf("%d\n", query(a,b));
}
fclose(stdin);
fclose(stdout);
return 0;
}