Pagini recente » Profil carmen_cngl | Utilizatori inregistrati la Infoarena Monthly 2012 - Runda 2 | Cod sursa (job #2581205) | Utilizatori inregistrati la preONI 2008, Runda 3, Clasele 5-8 | Cod sursa (job #2581203)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("stramosi.in");
ofstream fo("stramosi.out");
const int N = 250005, LG = 19;
vector<int> g[N];
int far[LG][N], lvl[N];
int n, q;
void make_far() {
for (int lg = 1; lg < LG; ++lg)
for (int i = 1; i <= n; ++i)
far[i][lg] = far[far[i][lg - 1]][lg - 1];
}
int get_far(int nod, int lvl) {
for (int i = 0; i < LG; ++i)
if ((1 << i) & lvl)
nod = far[nod][i];
return nod;
}
int main() {
fi >> n >> q;
for (int i = 1; i <= n; ++i)
fi >> far[i][0];
make_far();
while (q--) {
int nod, lvl;
fi >> nod >> lvl;
fo << get_far(nod, lvl) << '\n';
}
return 0;
}