Pagini recente » Cod sursa (job #2114159) | Cod sursa (job #245801) | Cod sursa (job #1602140) | Cod sursa (job #40562) | Cod sursa (job #2172058)
#include <fstream>
#include <math.h>
#include <climits>
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
const int N = 100001, LOG = (int)(log2(100001));
int n, m, nheap, h[N], v[N], poz[N], minim[N][20], logg;
void precalc() {
for (int i = 1; i <= n; i++) {
minim[i][0] = v[i];
std::fill(minim[i] + 1, minim[i] + logg + 1, INT_MAX);
}
for (int j = 1; j <= logg; j++) {
for (int i = 1; i <= n - ((1 << j) - 1); i++) {
int len = (1 << (j - 1));
minim[i][j] = min(minim[i][j - 1], minim[i + len][j - 1]);
}
}
}
int main()
{
in >> n >> m;
logg = (int)(log2(n));
for (int i = 1; i <= n; i++) in >> v[i];
precalc();
int st, dr;
for (int i = 0; i < m; i++) {
in >> st >> dr;
int lg = (int)(log2(dr - st));
out << min(minim[st][lg], minim[st + lg][lg]) << '\n';
}
in.close();
out.close();
}