Pagini recente » Cod sursa (job #457368) | Cod sursa (job #343423) | Cod sursa (job #2758209) | Cod sursa (job #1667105) | Cod sursa (job #2883942)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int NMAX=250005;
///rmq[i][j]=al 2^j-lea stramos al lui nodului i sau 0 in caz ca nu are
int N, M, lg, rmq[NMAX][32];
void buildSparseTable(){
for(int i=1;i<=N;i++){
fin>>rmq[i][0];
for(int j=1;j<lg;j++){
rmq[i][j]=rmq[rmq[i][j-1]][j-1];
}
}
}
int kthAncestor(int nod, int k){
for(int i=0;i<lg;i++){
if(k&(1<<i))
nod=rmq[nod][i];
}
return nod;
}
int main()
{
fin>>N>>M;
while((1<<lg)<=N)
lg++;
buildSparseTable();
int x, y;
while(M--){
fin>>x>>y;
fout<<kthAncestor(x,y)<<'\n';
}
fin.close();
fout.close();
}