Pagini recente » Acesarg | Monitorul de evaluare | Autentificare | Istoria paginii runda/test_casian/clasament | Cod sursa (job #1569444)
#include<fstream>
#include<cmath>
#include<iostream>
using namespace std;
ifstream f("stramosi.in");
ofstream g("stramosi.out");
const int N = 250010;
int n, m, v[N], vRad[N], pasRad;
int stramosi(int nod, int pasi) {
while (pasi > pasRad) {
nod = vRad[nod];
pasi = pasi - pasRad;
}
while ( pasi ) {
nod = v[nod];
pasi--;
}
return nod;
}
int main() {
f>>n>>m;
for (int i = 1 ; i <= n ; i++) {
f>>v[i];
vRad[i] = i;
}
pasRad = sqrt(n);
for (int j = 1 ; j <= n ; j++) {
for (int i = 1 ; i <= pasRad ; i++) {
vRad[j] = v[vRad[j]];
}
}
for (int i = 1 ; i <= m ; i++) {
int nod, pasi;
f>>nod>>pasi;
g<<stramosi(nod,pasi)<<'\n';
}
f.close();
g.close();
return 0;
}