Pagini recente » Cod sursa (job #210826) | Cod sursa (job #1864488) | Cod sursa (job #1790091) | Cod sursa (job #1029631) | Cod sursa (job #812749)
Cod sursa(job #812749)
#include <fstream>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
const int MAX_N = 256000;
const int MAX_BIT = 18;
int s[MAX_BIT][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 < MAX_BIT; ++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 = MAX_BIT - 1; 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;
}