Pagini recente » Cod sursa (job #2847077) | Cod sursa (job #1226265) | Cod sursa (job #3305910) | Cod sursa (job #3308938) | Cod sursa (job #3306317)
#include <fstream>
#include <vector>
using namespace std;
const int Nmax = 250005;
int n, m, F[Nmax], dp[Nmax][25];
// dp[nod][i] = stramosul cu nr 2^i al lui nod
void RMQ(){
for(int i = 1; i <= n; i++){
dp[i][0] = F[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];
}
}
}
int main()
{
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
fin >> n >> m;
for(int i = 1; i <= n; i++){
int aux;
fin >> aux;
F[i] = aux;
}
RMQ();
for(int i = 1; i <= m; i++){
int P, Q;
fin >> Q >> P;
for(int j = 20; j >= 0; j--){
if((1 << j) <= P){
Q = dp[Q][j];
P -= (1 << j);
}
}
fout << Q << "\n";
}
return 0;
}