Pagini recente » Cod sursa (job #3005681) | Cod sursa (job #3235146) | Cod sursa (job #1270314) | Cod sursa (job #2506107) | Cod sursa (job #2181816)
#include <iostream>
#include <fstream>
#define logN 20
#define maxN 250250
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int N, M, Q, P, lgN, maxLog;
int a[logN][maxN];
void readData() {
fin >> N >> M;
for (int i = 1 ; i <= N ; ++i)
fin >> a[1][i];
for (lgN = 1 ; (1<<lgN) < N ; ++lgN);
}
void buildMatrix() {
for (int i = 2 ; i <= lgN ; ++i)
for (int j = 1 ; j <= N ; ++j)
a[i][j] = a[i-1][a[i-1][j]];
}
int main() {
readData();
buildMatrix();
while (M--) {
fin >> Q >> P;
while (P) {
for (maxLog = 0 ; (1<<maxLog) <= P ; ++maxLog);
maxLog--;
P = P - (1<<maxLog);
Q = a[maxLog+1][Q];
}
fout << Q << '\n';
}
// for (int i = 1 ; i <= lgN ; ++i) {
// for (int j = 1 ; j <= N ; ++j)
// cout << a[i][j] << ' ';
// cout << '\n';
// }
return 0;
}