Pagini recente » Cod sursa (job #1536970) | Cod sursa (job #2418678) | Cod sursa (job #2677144) | Cod sursa (job #2667671) | Cod sursa (job #2873154)
#include<iostream>
#include<fstream>
using namespace std;
const int NMAX = 1e5 + 1;
const int LOG = 19;
int a[NMAX], m[NMAX][LOG];
ifstream in("rmq.in");
ofstream out("rmq.out");
int rmq(int l, int r) {
int k = 0;
while ((1 << (k + 1)) <= r - l + 1) k++;
return min(m[l][k], m[r - (1 << k) + 1][k]);
}int n, query;
int main() {
in >> n >> query;
for (int i = 1; i <= n; i++) in >> a[i], m[i][0] = a[i];
for (int j = 1; j <= LOG; j++)
for (int i = 1; i + (1 << j) - 1 <= n; i++)
m[i][j] = min(m[i][j - 1], m[i + (1 << (j - 1))][j - 1]);
for (int i = 1; i <= query; i++) {
int u, v;
in >> u >> v;
out << rmq(u, v) << '\n';
}
return 0;
}