Pagini recente » Borderou de evaluare (job #2010488) | Borderou de evaluare (job #190059) | Borderou de evaluare (job #1047854) | Borderou de evaluare (job #2212609) | Cod sursa (job #3265316)
#include <bits/stdc++.h>
#define cin ci
#define cout co
using namespace std;
ifstream cin("stramosi.in");
ofstream cout ("stramosi.out");
const int Lmax = 20;
const int Nmax = 250001;
int n, m, q, p;
int anc[Lmax][Nmax];
void binarylifting()
{
for(int l=1; l<Lmax; l++)
for(int node = 1; node <= n; node++)
anc[l][node] = anc[l-1][anc[l-1][node]];
}
int ans(int node, int nanc)
{
for(int l=0; l<Lmax; l++)
if(nanc & (1<<l))
node = anc[l][node];
return node;
}
int main()
{
cin >> n >> m;
for(int i=1; i<=n; i++)
cin >> anc[0][i];
binarylifting();
for(int i=1; i<=m; i++)
{
cin >> q >> p;
cout << ans(q, p) << '\n';
}
return 0;
}