Pagini recente » Aplicatii ale cautarii binare | Cod sursa (job #15828) | Cod sursa (job #3301714)
#include <iostream>
#include <vector>
using namespace std;
const int logmax=17;
#define NMAX 250001
int n, m;
int p[NMAX], dp[20][NMAX];
int main(){
#ifdef LOCAL
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
#endif
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
cin>>n>>m;
for (int i=1; i<=n; ++i){
cin>>p[i];
dp[0][i]=p[i];
}
for (int l=1; l<=logmax; ++l){
for (int i=1; i<=n; ++i){
dp[l][i]=dp[l-1][dp[l-1][i]];
}
}
for (int i=1; i<=m; ++i){
int nod, dist;
cin>>nod>>dist;
int cr=nod;
for (int p2=logmax; p2>=0; --p2){
if ((1<<p2)<=dist){
dist-=(1<<p2);
cr=dp[p2][cr];
}
}
cout<<cr<<"\n";
}
return 0;
}