Pagini recente » Cod sursa (job #1702665) | Cod sursa (job #1047362) | Cod sursa (job #1264532) | Cod sursa (job #877253) | Cod sursa (job #1566613)
#include <iostream>
#include <cstdio>
#define MAXN 250100
#define LOG 20
using namespace std;
int n, t[MAXN][LOG], m;
/// t[i][j] = al 2^j stramos a lui i
void citire()
{
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++)
scanf("%d ", &t[i][0]);
}
void prepare()
{
for (int i = 1; i < LOG; i++)
for (int nod = 1; nod <= n; nod++)
t[nod][i] = t[t[nod][i-1]][i-1];
}
int stra(int p, int q)
{
/// returneaza al p-lea stramos a lui q
int crt = q;
for (int i = 0; p >> i; i++) {
if ((p >> i) & 1)
crt = t[crt][i];
}
return crt;
}
int main()
{
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
citire();
prepare();
int p, q;
for (int i = 1; i <= m; i++) {
scanf("%d %d", &q, &p);
printf("%d\n", stra(p, q));
}
return 0;
}