Pagini recente » Cod sursa (job #1087833) | Cod sursa (job #1928364) | Cod sursa (job #2067156) | Cod sursa (job #1394807) | Cod sursa (job #3192805)
#include <bits/stdc++.h>
using namespace std;
const int NMAX = 1e5 + 5;
const int log_max = 18;
int rmq[log_max][NMAX];
int n, m;
ifstream in("rmq.in");
ofstream out("rmq.out");
int main() {
in >> n >> m;
for (int i = 0; i < n; i++)
in >> rmq[0][i];
int log = 1;
int max = 0;
while (log <= n) { log <<= 1; max++; }
log >>= 1, max--;
for (int i = 1; i <= max; i++) {
for (int j = 0; j <= n - (1<<i); j++)
rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j + (1<<(i-1))]);
}
while (m--)
{
int a, b;
in >> a >> b;
a--;b--;
int dist = b-a+1;
log = 1;
while ((1<<log) <= dist) log++;
log--;
int val = min(rmq[log][a], rmq[log][b-(1<<(log-1))]);
out << val << '\n';
}
}