Pagini recente » Cod sursa (job #1322313) | Cod sursa (job #1387199) | Cod sursa (job #1076519) | Cod sursa (job #2471564) | Cod sursa (job #2900615)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX = 100001;
const int K = 16; //>= log2(100000);
int d[NMAX + 1][K + 1];
int main()
{
int N, M, x, y;
int* v;
fin >> N >> M;
v = new int[N + 1];
for (int i = 1; i <= N; ++i)
{
fin >> v[i];
d[i][0] = v[i];
}
for (int j = 1; j <= K; ++j)
for (int i = 1; i + (1 << j) <= N + 1; ++i)
{
int p = 1 << (j - 1);
if (d[i][j - 1] < d[i + p][j - 1])
{
d[i][j] = d[i][j - 1];
}
else d[i][j] = d[i + p][j - 1];
}
for (int i = 1; i <= M; ++i)
{
fin >> x >> y;
int dim = y - x + 1;
int l = (int)log2(dim);
if (log2(dim) == l)
{
fout << min(d[x][l], d[y][0])<<'\n';
}
else
{
fout << min(d[x][l], d[y - (1 << l) + 1][l])<<'\n';
}
}
return 0;
}