Pagini recente » Profil Boghici_Eusebiu | Cod sursa (job #185731) | Rating Chirita Mihnea (mihnea99) | Cod sursa (job #1043383) | Cod sursa (job #2740668)
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
int n, m;
int t[250001];
int up[250001][20];
int depth[250001];
void solve() {
int i, x, Q, P, log, j;
ifstream f("stramosi.in");
f >> n >> m;
for (i = 1; i <= n; i++) {
f >> x;
t[i] = x;
}
log = 0;
while ((1 << log) <= n)
log++;
for (i = 1; i <= n; i++) {
up[i][0] = t[i];
if (t[i] != 0)
depth[i] = depth[t[i]] + 1;
for (j = 1; j <= log; j++)
up[i][j] = up[up[i][j - 1]][j - 1];
}
ofstream g("stramosi.out");
for (i = 1; i <= m; i++) {
f >> Q >> P;
if (depth[Q] < P) {
g << 0 << '\n';
continue;
}
for (j = 0; j < log; j++)
if (P & (1 << j))
Q = up[Q][j];
g << Q << '\n';
}
g.close();
}
int main() {
solve();
return 0;
}