Pagini recente » Borderou de evaluare (job #295077) | Borderou de evaluare (job #639822) | Borderou de evaluare (job #968700) | Borderou de evaluare (job #2535648) | Cod sursa (job #3231760)
#include <bits/stdc++.h>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
int main() {
long long n, m, i, j, q, p;
f >> n >> m;
int log_n = log2(n);
vector<long long> depth(n + 1);
vector<vector<long long>> ancestors(log_n + 1, vector<long long>(n + 1, 0));
depth[0] = 0;
for(i = 1; i <= n; ++i) {
f >> ancestors[0][i];
depth[i] = depth[ancestors[0][i]] + 1;
}
for(i = 1; i <= log_n; ++i)
for(j = 1; j <= n; ++j)
ancestors[i][j] = ancestors[i - 1][ancestors[i - 1][j]];
for(i = 0; i < m; ++i) {
f >> q >> p;
if(p >= depth[q]) {
g << "0\n";
} else {
long long exp = 0;
while(p) {
if(p & 1)
q = ancestors[exp][q];
++exp;
p >>= 1;
}
g << q << '\n';
}
}
return 0;
}