Pagini recente » Cod sursa (job #1156181) | Cod sursa (job #776478) | Cod sursa (job #369974) | Cod sursa (job #2640396) | Cod sursa (job #2434021)
#include <fstream>
#define MAX 250005
#define LOGMAX 500
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n,q,dp[LOGMAX][MAX];
void read();
void solve();
int lsb(int&);
int main(){
read();
solve();
return 0;
}
void solve(){
int a,b,ancestor;
while(q--){
fin>>a>>b;
ancestor=a;
while(b){
ancestor=dp[lsb(b)-1][ancestor];
b-=lsb(b);
}
fout<<ancestor<<'\n';
}
}
void read(){
int i,j;
fin>>n>>q;
for(i=1;i<=n;++i)
fin>>dp[0][i];
///precalculate
for(i=1;i<LOGMAX;++i){
for(j=1;j<=n;++j){
dp[i][j]=dp[i-1][dp[i-1][j]];
}
}
}
int lsb(int& x){
return x&(-x);
}