Pagini recente » Cod sursa (job #2709918) | Cod sursa (job #1999183) | Cod sursa (job #51625) | Cod sursa (job #2034946) | Cod sursa (job #812745)
Cod sursa(job #812745)
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int MAX_N = 256000;
int s[16][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 < 16; ++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) {
int result = 0;
for (int i = 15; 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;
}