Pagini recente » Cod sursa (job #1573356) | Cod sursa (job #117555) | Cod sursa (job #3206051) | Cod sursa (job #1223890) | Cod sursa (job #1539789)
#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)<=putere; ++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
fout<<query(a, b)<<'\n';
}
return 0;
}