Pagini recente » Cod sursa (job #2480009) | Cod sursa (job #3040935) | Cod sursa (job #2921495) | Cod sursa (job #54564) | Cod sursa (job #709895)
Cod sursa(job #709895)
#include <cstdio>
long a[20][250020], N, Q, st, nr, i, j, aux;
int log2(long x) {
long nr = 0;
for (; x > 1; x >>= 1, ++nr);
return nr;
}
int stramos(long st, long nr) {
long lognr = log2(nr);
if (st == 0) {
return 0;
}
if ((nr&(nr-1))==0) {
if (a[lognr][st] != 0) {
return a[lognr][st];
}
}
while (a[lognr][st] == 0 && lognr != 0) {
--lognr;
}
return stramos(a[lognr][st], nr-(1<<lognr));
}
int main() {
freopen("stramosi.in","r",stdin);
freopen("stramosi.out","w",stdout);
scanf("%ld %ld", &N, &Q);
for (i = 1; i <= N; ++i) {
scanf("%ld", &a[0][i]);
}
for (i = 1, aux = log2(N); i <= aux; ++i) {
for (j = 1; j <= N; ++j) {
a[i][j] = a[i-1][ a[i-1][j] ];
}
}
for (i = 0; i < Q; ++i) {
scanf("%ld %ld", &st, &nr);
printf("%ld\n", stramos(st, nr));
}
return 0;
}