Pagini recente » Cod sursa (job #2901034) | Cod sursa (job #317059) | Cod sursa (job #480548) | Cod sursa (job #2839336) | Cod sursa (job #2267400)
#include <fstream>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
const int NMAX = 250005;
int Sol[21][NMAX];
int Log2[NMAX];
int N, M;
void Read(){
in >> N >> M;
for(int i = 1; i <= N; ++i)
in >> Sol[0][i];
}
void Calculate(){
for(int i = 2; i <= N; ++i)
Log2[i] = Log2[i / 2] + 1;
for(int i = 1; (1 << i) <= N; ++i)
for(int j = 1; j <= N; ++j)
Sol[i][j] = Sol[i - 1][Sol[i - 1][j]];
}
int Find(int P, int Q){
while(P){
int R = Log2[P];
Q = Sol[R][Q];
P -= (1 << R);
}
return Q;
}
int main(){
Read();
Calculate();
while(M--){
int P, Q;
in >> Q >> P;
out << Find(P, Q) << "\n";
}
return 0;
}