Pagini recente » Cod sursa (job #2563320) | Cod sursa (job #930550) | Cod sursa (job #1893909) | Cod sursa (job #468849) | Cod sursa (job #1448839)
//0010
#include <cstdio>
long eb[20][250050];
int cit() {
int ans = 0;
char c;
while ((c = getchar()) >= '0' && c <= '9') {
ans = ans * 10 + c - '0';
}
return ans;
}
void afis(int n) {
int l = 0;
char c[20];
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;
}