Pagini recente » Cod sursa (job #1682470) | Cod sursa (job #1665637) | Cod sursa (job #1435880) | Monitorul de evaluare | Cod sursa (job #790006)
Cod sursa(job #790006)
#include <cstdio>
int N, M;
int *S;
int log2(int x)
{
if(x == 1)
return 0;
else
return 1 + log2(x / 2);
}
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);
}
int f(int x, int i)
{
if(i == 0)
return S[x];
return f(f(x, i - 1), i - 1);
}
void pre()
{
}
int solve(int p, int q)
{
int u = p & (p - 1);
if(u == 0) // putere a lui 2
return f(q, log2(p));
return solve(u, solve(p - u, q));
}
int main()
{
freopen("stramosi.in", "r", stdin);
freopen("stramosi.out", "w", stdout);
read();
pre();
int p, q;
while(M--)
{
scanf("%d%d", &q, &p);
printf("%d\n", solve(p, q));
}
return 0;
}