Pagini recente » Cod sursa (job #2039694) | Cod sursa (job #2480863) | Cod sursa (job #1108648) | Cod sursa (job #1935969) | Cod sursa (job #2100946)
#include <iostream>
#include <fstream>
#include <cmath>
#define N (int)1e5
#define SZ (int)log2(N)
#define DBG std::cout << "DEBUG\n"
using namespace std;
ifstream in("rmq.in");
ofstream out("rmq.out");
void preprocess(int a[][SZ], int b[], int n) {
for (int i = 0; i < n; i++)
a[i][0] = i;
for (int j = 1; j <= log2(n); j++) {
for (int i = 0; i + (1 << j) - 1 < n; i++) {
if (b[a[i][j - 1]] < b[a[i + (1 << j - 1)][j - 1]]) {
a[i][j] = a[i][j - 1];
} else {
a[i][j] = a[i + (1 << j - 1)][j - 1];
}
}
}
}
int query(int x, int y, int a[][SZ], int b[]) {
int length = y - x + 1;
int k = log2(length);
return min(b[a[x][k]], b[a[x + length - (1 << k)][k]]);
}
int n, m, rmq[N][SZ], a[N];
int main() {
in >> n >> m;
for (int i = 0; i < n; i++)
in >> a[i];
preprocess(rmq, a, n);
int qa, qb;
for (int i = 1; i <= m; i++) {
in >> qa >> qb;
out << query(qa - 1, qb - 1, rmq, a) << "\n";
}
return 0;
}