Pagini recente » Cod sursa (job #1836797) | Cod sursa (job #602008) | Cod sursa (job #517038) | Cod sursa (job #516275) | Cod sursa (job #2070593)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream fin ("stramosi.in");
ofstream fout ("stramosi.out");
const int NMAX = 250005;
int v[NMAX], N, Q;
int rmq[20][NMAX], lg[NMAX];
void pr()
{
lg[2] = 1;
for (int i = 3; i < NMAX; i++) lg[i] = lg[i >> 1] + 1;
for (int j = 1; j <= 17; ++j)
{
for (int i = 1; i <= N; ++i)
{
int stramos_jminusunu = rmq[j - 1][i];
rmq[j][i] = rmq[j - 1][stramos_jminusunu];// f(f(j - 1))
}
}
}
int RMQ (int x, int y)
{
for (int i = lg[y]; i >= 0; i--)
if (y & (1 << i))
x = rmq[i][x];
return x;
}
void read()
{
fin >> N >> Q;
for (int i = 1; i<=N; ++i)
{
fin >> v[i];
rmq[0][i] = v[i];
}
pr();
int x, y;
for (int i = 1; i<=Q; ++i)
{
fin >> x >> y;
fout << RMQ(x, y)<< "\n";
}
}
int main()
{
read();
return 0;
}