Pagini recente » Cod sursa (job #635704) | Cod sursa (job #132903) | Cod sursa (job #3249289) | Cod sursa (job #1198647) | Cod sursa (job #3235446)
#include <iostream>
#include <cmath>
#include <queue>
using namespace std;
int Stramosi[250001];
int RMQ[250001][18];
int main()
{
int N, NumberOfQueries;
cin >> N >> NumberOfQueries;
for (int i = 1; i <= N; i++)
cin >> Stramosi[i];
int LOG_MAX = (int)log2(N);
for (int i = 1; i <= N; i++)
RMQ[i][0] = Stramosi[i];
for (int j = 1; j <= LOG_MAX; j++)
for (int i = 1; i <= N; i++)
RMQ[i][j] = RMQ[RMQ[i][j - 1]][j - 1];
while (NumberOfQueries)
{
int Q, P;
cin >> Q >> P;
queue < bool > Bits;
int CopyP = P;
while (CopyP != 0)
{
Bits.push(CopyP % 2);
CopyP = CopyP / 2;
}
int BitCounter = 0;
while (!Bits.empty())
{
if (Bits.front() == 1)
Q = RMQ[Q][BitCounter];
Bits.pop();
BitCounter++;
}
cout << Q << '\n';
NumberOfQueries --;
}
return 0;
}