Pagini recente » Cod sursa (job #2706602) | Cod sursa (job #2958143) | Cod sursa (job #2434453) | Cod sursa (job #2587333) | Cod sursa (job #2909140)
#include <bits/stdc++.h>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
#define cin f
#define cout g
const int Max = 25e4 + 1;
int n, m, log2n, arr[Max], father[Max][20];
int main()
{
cin >> n >> m;
log2n = floor(log(n) / log(2));
for(int i = 1; i <= n; i ++)
cin >> arr[i];
for(int i = 1; i <= log2n; i ++)
father[1][i] = 0;
for(int i = 1; i <= n; i ++)
father[i][0] = arr[i];
for(int i = 1; i <= log2n; i ++)
for(int j = 1; j <= n; j ++)
father[j][i] = father[father[j][i - 1]][i - 1];
for(int i = 1; i <= m; i ++)
{
int q, p, putere = (1 << log2n);
cin >> q >> p;
for(int i = log2n; i >= 0; i --)
{
if(putere <= p)
{
p -= putere;
q = father[q][i];
}
if(p == 0)
break;
if(q == 0)
break;
putere >>= 1;
}
cout<<q<<'\n';
}
return 0;
}