Pagini recente » Cod sursa (job #875653) | Cod sursa (job #578771) | Cod sursa (job #1137203) | Cod sursa (job #1212811) | Cod sursa (job #2901900)
#include <iostream>
#include <fstream>
#define N 100005
#define M 17
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int log_bin[N], mat[N][M];
int query(int a, int b)
{
int length = b - a + 1;
int k = log_bin[length];
return min(mat[a][k], mat[b - (1 << k) + 1][k]);
}
int main()
{
int n, m, i, x, log, a, b;
fin >> n >> m;
log_bin[1] = 0;
for(i = 2; i <= n; i++)
log_bin[i] = 1 + log_bin[i / 2];
for(i = 0; i < n; i++)
{
fin >> x;
mat[i][0] = x;
}
for(log = 1; log < M; log++)
for(i = 0; i + (1 << log) - 1 < n; i++)
mat[i][log] = min(mat[i][log - 1], mat[i + (1 << (log - 1))][log - 1]);
for(i = 1; i <= m; i++)
{
fin >> a >> b;
fout << query(a - 1, b - 1) << "\n";
}
return 0;
}