Pagini recente » Cod sursa (job #2787866) | Cod sursa (job #2971378) | Cod sursa (job #202113) | Cod sursa (job #107764) | Cod sursa (job #2219940)
#include <iostream>
#include <fstream>
using namespace std;
#define NMAX 100002
#define LOGMAX 18
#define min(a, b) (a < b) ? a : b
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int main(void)
{
int n, m, a, b;
int lg[NMAX], diff, minim;
int rmq[LOGMAX][NMAX];
fin >> n >> m >> rmq[0][1];
int i, j;
for (i = 2; i <= n; i++)
{
fin >> rmq[0][i];
lg[i] = lg[i / 2] + 1;
}
for (i = 1; (1 << i) <= n; i++)
{
for (j = 1; j + (1 << i) - 1 <= n; j++)
{
rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << i) / 2]);
}
}
for (i = 0; i < m; i++)
{
fin >> a >> b;
diff = lg[b - a + 1];
minim = min(rmq[diff][a], rmq[diff][b - (1 << diff) + 1]);
fout << minim << '\n';
}
return 0;
}