Pagini recente » Cod sursa (job #1845112) | Cod sursa (job #508450) | Cod sursa (job #1739941) | Cod sursa (job #257434) | Cod sursa (job #2052632)
#include <fstream>
#define DEF 250010
#define DEF2 20
using namespace std;
ifstream fin ("stramosi.in");
ofstream fout ("stramosi.out");
int T[DEF], //vector de tati
D[DEF2][DEF], //D[k][i] al 2 ^ k lea stramosi al i
log[DEF],
n, m;
int main () {
fin >> n >> m;;
for (int i = 1; i <= n; i++) {
fin >> T[i];
D[0][i] = T[i];
}
for (int k = 1; (1 << k) <= n; k++) {
bool ok = false;
for (int i = 1; i <= n; i++) {
D[k][i] = D[k - 1][i];
for (int j = 1; j <= (1 << (k - 1)); j++) {
D[k][i] = T[D[k][i]];
}
ok = D[k][i];
}
if (!ok)
break;
}
log[1] = 0;
for (int i = 2; i <= n; i++) {
log[i] = 1 + log[i / 2];
}
for (; m; -- m) {
int x, y, t;
fin >> x >> y;
while (y) {
x = D[log[y]][x];
y -= 1 << (log[y]);
}
fout << x << "\n";
}
return 0;
}