Pagini recente » Cod sursa (job #162354) | Cod sursa (job #674340) | Cod sursa (job #214628) | Cod sursa (job #2332225) | Cod sursa (job #1539784)
#include<bits/stdc++.h>
using namespace std;
#define MAXN 250002
ifstream fin("stramosi.in");
//ofstream fout("stramosi.out");
int n, m, parent[21][MAXN]; // stramosul 2^k (<=20) a lui node
// parent[k][node] = parent[k-1][parent[k-1][node]]
// 2^k 2^(k-1)
void process(){
int i, j;
for(i=1; i<=20; ++i)
for(j=1; j<=n; ++j)
parent[i][j]=parent[i-1][parent[i-1][j]];
}
int query(int node, int putere){
int i;
for(i=0; (1<<i)<=node; ++i)
if((putere>>i)&1)
node=parent[i][node];
return node;
}
int main ()
{
int i;
fin>>n>>m;
for(i=1; i<=n; ++i)
fin>>parent[0][i];
process();
while(m--){
int a, b; fin>>a>>b; // al b-lea
cout<<query(a, b)<<'\n';
}
return 0;
}