Pagini recente » Cod sursa (job #2384592) | Cod sursa (job #860838) | Cod sursa (job #1130351) | Cod sursa (job #1253946) | Cod sursa (job #2181854)
#include <iostream>
#include <fstream>
#include <vector>
#define N 100001
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int v[18][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 = 1; i <= n; ++i) {
fin >> v[0][i];
}
compute_logs();
for (int i = 1; (1 << (i - 1)) <= n; ++i) {
for (int j = 1; j <= n + 1 - (1 << i); ++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], v[ldif][q - ldif]) << '\n';
}
return 0;
}