Pagini recente » Cod sursa (job #2797346) | Cod sursa (job #3133986)
//#include <iostream>
#include <fstream>
#include<vector>
using namespace std;
std::ifstream cin("stramosi.in");
std::ofstream cout("stramosi.out");
int _2la_x(int val){
if(val == 0) return 1;
return 1<<val;
}
int log2(int val){
if(val == 0 || val == 1)return 0;
return 1 + log2(val>>1);
}
int main() {
int n, m;
vector<int> familie;
cin>>n>>m;
familie.push_back(0);
for(int i=0;i<n;i++){
int aux;
cin>>aux;
familie.push_back(aux);
}
int log2n = log2(n);
int la[n+1][log2n+1]={0};
for(int i = 0; i<n+1;i++){
la[i][0] =familie[i];
}
for(int j = 1; j<=log2n;j++){
la[0][j]=0;
for(int i = 1; i<n+1;i++){
la[i][j] = la[la[i][j-1]][j-1];
}
}
for(int i=0;i<m;i++){
int membru,nivel,res;
cin>>membru>>nivel;
res=membru;
while(nivel){
res = la[membru][log2(nivel)];
nivel -= _2la_x(log2(nivel));
}
cout<<res<<"\n";
}
return 0;
}