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