Pagini recente » Monitorul de evaluare | Atasamentele paginii Permutari | Statisticile problemei Permutari | Monitorul de evaluare | Cod sursa (job #3311143)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
vector<vector<int> > ancestor;
int n, q;
void initializare(){
ancestor.resize(20, vector<int>(n+1, 0));
}
void binary_lifting(){
for(int i=1;i<20;i++){
for(int j=1;j<=n;j++){
ancestor[i][j]=ancestor[i-1][ancestor[i-1][j]];
}
}
}
void interogare(int nod, int stramos){
if(stramos>=n){
fout<<0<<'\n';
return;
}
for(int i=0;i<20;i++){
if((1<<i)&stramos){
nod=ancestor[i][nod];
}
}
fout<<nod<<'\n';
}
int main(){
fin>>n>>q;
initializare();
for(int i=1;i<=n;i++){
fin>>ancestor[0][i];
}
binary_lifting();
for(int i=1;i<=q;i++){
int nod, stramos;
fin>>nod>>stramos;
interogare(nod,stramos);
}
}