Pagini recente » Cod sursa (job #821698) | Cod sursa (job #2019874) | Cod sursa (job #1259852) | Cod sursa (job #1395089) | Cod sursa (job #812748)
Cod sursa(job #812748)
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int MAX_N = 256000;
int s[20][MAX_N];
int N, M;
void read();
void pre();
void answer();
int query(int, int);
int main() {
read();
pre();
answer();
return 0;
}
void read() {
fin >> N >> M;
for (int i = 1; i <= N; ++i) {
fin >> s[0][i];
}
}
void pre() {
for (int i = 1; i < 20; ++i) {
for (int j = 1; j <= N; ++j) {
s[i][j] = s[i-1][s[i-1][j]];
}
}
}
void answer() {
int q, p;
for (int i = 1; i <= M; ++i) {
fin >> q >> p;
fout << query(q, p) << '\n';
}
}
int query(int nod, int dist) {
if (dist == 0) return 0;
int result = 0;
for (int i = 20; i >= 0; --i) {
if (!((1 << i) & dist)) continue;
if ((1 << i) == dist) {
result = s[i][nod];
} else {
nod = s[i][nod];
dist ^= (1 << i);
}
}
return result;
}