Pagini recente » Cod sursa (job #2319231) | Cod sursa (job #878296) | Cod sursa (job #3240604)
#include <iostream>
#include <fstream>
std::ifstream f("rmq.in");
std::ofstream g("rmq.out");
const int NMAX = 1e5, LOGMAX = 17;
int N, Q, x, y;
int r[LOGMAX + 1][NMAX + 1];
int log2[NMAX + 1];
int main()
{
f >> N >> Q;
for (int i = 2; i <= N; i++)
log2[i] = log2[i / 2] + 1;
for (int i = 1; i <= N; i++)
f >> r[0][i];
for (int p = 1; (1 << p) <= N; p++)
for (int i = 1; i <= N; i++)
{
int j = i + (1 << (p - 1));
r[p][i] = r[p - 1][i];
if (j <= N)
r[p][i] = std::min(r[p][i], r[p - 1][j]);
}
while (Q--)
{
f >> x >> y;
int L = y - x + 1, k = log2[L], len = (1 << k);
g << std::min(r[k][x], r[k][y - len + 1]) << '\n';
}
f.close();
g.close();
return 0;
}