Pagini recente » Cod sursa (job #1045822) | Rating Cristian-Stefan Lazar (Cristian243) | Cod sursa (job #129679) | Cod sursa (job #2753307) | Cod sursa (job #2181832)
#include <iostream>
#include <fstream>
#include <vector>
#define N 100001
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int v[17][100001];
int n, m, x;
int logs[N];
void compute_logs() {
logs[2] = 1;
for (int i = 3; i < N; ++i) {
logs[i] = logs[i - 1];
if ((i & (i - 1)) == 0) {
logs[i]++;
}
}
}
int main() {
fin >> n >> m;
for (int i = 0; i < n; ++i) {
fin >> v[0][i];
}
compute_logs();
for (int i = 1; (1 << (i - 1)) <= n; ++i) {
for (int j = 0; j < n - (1 << (i - 1)); ++j) {
v[i][j] = min(v[i - 1][j], v[i - 1][j + (1 << (i - 1))]);
}
}
int p, q;
for (int i = 0; i < m; ++i) {
fin >> p >> q;
int ldif = logs[q - p];
fout << min(v[ldif][p - 1], v[ldif][q - 1 - ldif]) << '\n';
}
return 0;
}