Pagini recente » Cod sursa (job #1357476) | Cod sursa (job #2664219) | Cod sursa (job #938131) | Cod sursa (job #2152063) | Cod sursa (job #790029)
Cod sursa(job #790029)
#include <cstdio>
int N, M, *S;
int log2(int x)
{
int c = 0;
while(x)
{
c++;
x = x >> 1;
}
return c - 1;
}
void read()
{
scanf("%d%d\n", &N, &M);
S = new int[N + 1];
S[0] = 0;
for(int i = 1; i <= N; i++)
scanf("%d", S + i);
}
#define NECALCULAT -1
#define MAXN 250002
int mem[33][MAXN];
int main()
{
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
read();
for(int i = 0; i <= N; i++)
mem[0][i] = S[i];
for(int j = 1; j < log2(M) + 1; j++)
for(int i = 0; i <= N; i++)
mem[j][i] = mem[j - 1][mem[j - 1][i]];
int p, q, u;
while(M--)
{
scanf("%d%d", &q, &p);
while(u = (p & (p - 1)))
q = mem[log2(p - u)][q], p = u;
printf("%d\n", mem[log2(p)][q]);
}
return 0;
}