Pagini recente » Cod sursa (job #752291) | Cod sursa (job #315757) | Cod sursa (job #2611325) | Cod sursa (job #376354) | Cod sursa (job #1328637)
#include <iostream>
#include <fstream>
#define nmax 250005
using namespace std;
ifstream fin("stramosi.in");
ofstream fout("stramosi.out");
int n, m, nod, p;
int s[20][nmax], Exp[nmax];
int find(int p, int nod) {
if (p > n) return 0;
if (p == 0) return nod;
int i = Exp[p];
return find(p - (1<<i), s[i][nod]);
}
int main() {
fin >> n >> m;
for (int i = 1; i <= n; i++)
fin >> s[0][i];
for (int i = 1; (1<<i) <= n; i++)
for (int j = 1; j <= n; j++)
s[i][j] = s[i-1][s[i-1][j]];
for (int i = 2; i <= n; i++)
Exp[i] = Exp[i/2] + 1;
for (int i = 1; i<= m; i++) {
fin >> nod >> p;
fout << find(p, nod) << "\n";
}
fin.close();
fout.close();
return 0;
}