Pagini recente » Cod sursa (job #2287370) | Cod sursa (job #1693335) | Cod sursa (job #2738662) | Cod sursa (job #1919611) | Cod sursa (job #3172792)
#include <fstream>
using namespace std;
const int nmax = 250005;
int Log[nmax];
int dp[nmax][25], father[nmax];
int n, m;
int main(){
ifstream f("stramosi.in");
ofstream g("stramosi.out");
f >> n >> m;
for(int i = 1; i <= n; i++){
f >> father[i];
}
//precalculam
for(int i = 1; i <= n; i++){
dp[i][0] = father[i];
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= 20; j++){
dp[i][j] = dp[dp[i][j - 1]][j - 1];
}
}
Log[1] = 0;
for(int i = 2; i <= nmax; i++){
Log[i] = Log[i / 2] + 1;
}
//raspundem
while(m--){
int node, p;
f >> node >> p;
while(p > 0){
node = dp[node][Log[p]];
p -= (1 << Log[p]);
}
g << node << '\n';
}
}