Pagini recente » Cod sursa (job #1940921) | Cod sursa (job #1226548) | Cod sursa (job #1683001) | Cod sursa (job #3228868) | Cod sursa (job #3211805)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int NMAX = 1e5+10;
int n, m, bs=0;
int v[NMAX], rmq[NMAX][17];
void citire() {
f >> n >> m;
int aux = n;
while (aux) {
bs++;
aux = aux >> 1;
}
for (int i = 1; i <= n; i++) {
int x;
f >> x;
v[i] = x;
rmq[i][0] = x;
}
}
void preprocess() {
for (int k = 1; k <= bs; k++) {
for (int i = 1; i + (1 << k) - 1 <= n; i++)
rmq[i][k] = min(rmq[i][k - 1], rmq[i + (1 << (k - 1))][k - 1]);
}
}
int query(int l, int r) {
int length = r - l + 1;
int k = 0;
while ((1 << (k + 1)) <= length) {
k++;
}
return min(rmq[l][k], rmq[r - (1 << k) + 1][k]);
}
int main()
{
citire();
preprocess();
for (int i = 0; i < m; i++) {
int a, b;
f >> a >> b;
g<<query(a, b)<<"\n";
}
}