Pagini recente » Cod sursa (job #2587581) | Cod sursa (job #3208988) | Cod sursa (job #2122910) | Cod sursa (job #953308) | Cod sursa (job #2371274)
#include <vector>
#include <fstream>
using namespace std;
const int MAX_N = 250001, MAX_LEV = 19;
int stramosi[MAX_LEV][MAX_N];
void Read(fstream & fin, int n){
for(int i = 1; i <= n; i++){
fin >> stramosi[0][i];
}
}
void Complete(int n){
for(int i = 1; i < MAX_LEV; i++){
for(int j = 1; j <= n; j++){
stramosi[i][j] = stramosi[i-1][stramosi[i-1][j]];
}
}
}
void Resolve(fstream & fin, fstream & fout, int m){
for(int z = 0; z < m; ++z){
int q, p;
fin >> q >> p;
int ans = q;
for(int pow = 0; (ans != 0) && (p > 0); p >>=1, ++pow ){
if((p & 1) == 0){
continue;
}
ans = stramosi[pow][ans];
}
fout << ans << endl;
}
}
int main(){
int n, m;
fstream fin("stramosi.in", fstream::in), fout("stramosi.out", fstream::out);
fin >> n >> m;
Read(fin, n);
Complete(n);
Resolve(fin, fout, m);
}