Pagini recente » Cod sursa (job #2638057) | Cod sursa (job #2896191) | Cod sursa (job #2805226) | Cod sursa (job #956105) | Cod sursa (job #3172780)
#include <fstream>
using namespace std;
ifstream f("intrare.in");
ofstream g("iesire.out");
const int nmax = 250005;
int Log[21];
int dp[nmax][25], father[nmax];
int n, m;
int main(){
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 <= 20; 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 -= Log[p];
}
g << node << '\n';
}
}