Pagini recente » Cod sursa (job #1670271) | Cod sursa (job #621651) | Cod sursa (job #673215) | Cod sursa (job #247581) | Cod sursa (job #3134286)
#include <fstream>
#include <iostream>
using namespace std;
ifstream in("stramosi.in");
ofstream out("stramosi.out");
int str[250001][18];
int membru, rang;
int main(){
int N, M;
in >> N >> M;
for (int i = 1; i <= N; i++){
in >> str[i][0];//retinem stramosii directi
}
for (int i = 1; (1 << i) <= N; i++)
for (int j = 1; j <= N; j++){
str[j][i] = str[str[j][i - 1]][i - 1]; //stramosul 2*n al lui j este stramosul n al stramosului n al lui j
}
int j;
for (int i = 1; i <= M; i++){
j = 0;
in >> membru >> rang;
while (rang){
if (rang & 1) membru = str[membru][j];
rang = (rang >> 1);
j++;
}
out << membru << '\n';
}
in.close();
out.close();
return 0;
}