Pagini recente » Cod sursa (job #677779) | Cod sursa (job #2922508) | Cod sursa (job #280566) | Cod sursa (job #1625155) | Cod sursa (job #1448845)
//0010
#include <cstdio>
long eb[20][250050];
int cit() {
int ans = 0;
char c = getchar();
while (c < '0' || c > '9') {
c = getchar();
}
while (c >= '0' && c <= '9') {
ans = (ans << 3) + (ans << 1) + (c - '0');
c = getchar();
}
return ans;
}
void afis(int n) {
int l = 0;
char c[20];
if (n == 0) {
putchar('0');
}
while (n > 0) {
c[l++] = n % 10 + '0';
n /= 10;
}
for (int i = l - 1; i >= 0; i--) {
putchar(c[i]);
}
putchar('\n');
}
int main() {
// FILE* fi = fopen("stramosi.in", "rt");
// FILE* fo = fopen("stramosi.out", "wt");
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
long n = cit(), m = cit();
for (long i = 1; i <= n; i++) {
eb[0][i] = cit();
}
long aux = n, k = 0;
while (aux > 0) {
k++;
aux >>= 1;
}
for (long i = 0; i < k; i++) {
eb[i][0] = 0;
}
for (long i = 1; i < k; i++) {
for (long j = 1; j <= n; j++) {
eb[i][j] = eb[i - 1][eb[i - 1][j]];
}
}
for (long w = 1; w <= m; w++) {
long q = cit(), p = cit();
int v[20], kp = 0;
while (p > 0) {
v[kp] = p % 2;
p >>= 1;
kp++;
}
while (kp > 0) {
kp--;
if (v[kp] == 1) {
q = eb[kp][q];
}
}
afis(q);
}
return 0;
}