Pagini recente » Cod sursa (job #1073275) | Cod sursa (job #436258) | Cod sursa (job #1727340) | Cod sursa (job #2400359) | Cod sursa (job #2850301)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int NMAX = 100000;
const int MMAX = 1000000;
const int logmax = 17;
int n, m;
int rmq[1 + NMAX][logmax];
int putere2[1 + NMAX];
void RMQ()
{
for (int l = 1; (1 << l) <= n; l++)
for (int i = 1; i <= n - (1 << l) + 1; i++)
rmq[i][l] = min(rmq[i][l - 1], rmq[i + (1 << l - 1)][l - 1]);
}
int main()
{
in >> n >> m;
for (int i = 1; i <= n; i++)
{
in >> rmq[i][0];
}
int putere = 1;
int exponent = 0;
for (int i = 1; i <= n; i++)
{
if (putere * 2 <= i)
{
putere *= 2;
exponent++;
}
putere2[i] = exponent;
}
RMQ();
int a, b;
for (int i = 1; i <= m; i++)
{
in >> a >> b;
out << min(rmq[a][putere2[b - a + 1]],rmq[b-(1 << putere2[b - a + 1]) + 1][putere2[b - a + 1]]) << '\n';
}
}