Pagini recente » Istoria paginii runda/pre_oni_gim2015 | Cod sursa (job #171757) | Cod sursa (job #2038681) | Cod sursa (job #819704) | Cod sursa (job #2868180)
#include <fstream>
#define DIM 100001
std::ifstream fin("rmq.in");
std::ofstream fout("rmq.out");
int n, m;
int r[17][DIM], E[DIM];
int main()
{
fin >> n >> m;
for (int i = 1;i <= n; i++)
fin >> r[0][i];
for (int pow = 1; (1 << pow) <= n; pow++)
{
for (int i = 1; i <= n; i++)
{
r[pow][i] = r[pow - 1][i];
int j = i + (1 << (pow - 1));
if (j <= n && r[pow - 1][j] < r[pow][i])
r[pow][i] = r[pow - 1][j];
}
}
E[1] = 0;
for (int i = 2; i <= n; i++)
E[i] = 1 + E[i / 2];
for (int i = 1; i <= m; i++)
{
int x, y;
fin >> x >> y;
int l = y - x + 1;
int exp = E[l], pow = (1 << exp);
int min = std::min(r[exp][x], r[exp][y - pow + 1]);
fout << min << '\n';
}
return 0;
}