Pagini recente » Borderou de evaluare (job #1012904) | Borderou de evaluare (job #814919) | Borderou de evaluare (job #263419) | Borderou de evaluare (job #2018090) | Cod sursa (job #3274356)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, q, i, p[250002][20], x, y;
static inline void Precalc() {
for(int put = 1; put < 20; put++) {
for(int i = 1; i <= n; i++) p[i][put] = p[p[i][put - 1]][put - 1];
}
}
static inline int Calc(int nod, int val) {
for(int i = 0; i < 20; i++) {
if(val >> i & 1) nod = p[nod][i];
}
return nod;
}
int main() {
//ios_base::sync_with_stdio(false);
fin.tie(nullptr);
fout.tie(nullptr);
fin >> n >> q;
for(i = 1; i <= n; i++) fin >> p[i][0];
Precalc();
while(q--) {
fin >> x >> y;
fout << Calc(x, y) << "\n";
}
return 0;
}