Pagini recente » Probleme de Taietura | Cod sursa (job #580042) | Cod sursa (job #385024) | Cod sursa (job #1258327) | Cod sursa (job #2087788)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("stramosi.in");
ofstream cout("stramosi.out");
int dp[250100][20];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> dp[i][1];
}
for (int bit = 2; bit <= 20; bit++) {
if ((1 << ((bit - 1))) > n) {
break;
}
for (int i = 1; i <= n; i++) {
dp[i][bit] = dp[dp[i][bit - 1]][bit - 1];
}
}
for (int i = 1; i <= m; i++) {
int nr, pos;
cin >> nr >> pos;
for (int bit = 20; bit >= 0; bit--) {
if ((1 << bit) <= pos) {
pos -= (1 << bit);
nr = dp[nr][bit + 1];
}
}
cout << nr << '\n';
}
return 0;
}