Pagini recente » Cod sursa (job #290008) | Cod sursa (job #1964331) | Cod sursa (job #1931645) | Cod sursa (job #1150198) | Cod sursa (job #1699238)
#include <cstdio>
#include <cmath>
#define LOGMAX 20
#define NMAX 250009
using namespace std;
int N, M, lg;
int *s[LOGMAX];
int main() {
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
scanf("%d%d", &N, &M);
lg = log2(N);
for (int i = 0; i <= lg; ++i) {
s[ i ] = new int[ N + 1 ];
}
for (int i = 1; i <= N; ++i) {
scanf("%d", &s[ 0 ][ i ]);
}
for (int k = 1; k <= lg; ++k) {
for (int i = 1; i <= N; ++i) {
s[ k ][ i ] = s[ k - 1 ][ s[ k - 1 ][ i ] ];
}
}
while (M--) {
int x, p;
scanf("%d%d", &x, &p);
for (int k = 0; k <= lg && x; ++k, p >>= 1) {
if (p & 1) {
x = s[ k ][ x ];
}
}
printf("%d\n", x);
}
for (int k = 0; k <= lg; ++k) {
delete[] s[ k ];
}
return 0;
}