Pagini recente » Cod sursa (job #2875386) | Monitorul de evaluare | Cod sursa (job #2552674) | Cod sursa (job #1054467) | Cod sursa (job #2880008)
// problema RMQ
// solutie de
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <string>
#include <vector>
#include <queue>
#include <stack>
#include <deque>
using namespace std;
#define NMax 100000
#define LogNMax 17
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m;
int v[NMax + 3], rmq[LogNMax + 3][NMax + 3];
void input() {
fin >> n >> m;
for (int i = 1; i <= n; ++i) fin >> v[i];
}
void init() {
int q;
for (int i = 1; i <= n; ++i) rmq[0][i] = v[i];
for (int p = 1; p <= LogNMax; ++p) {
q = 1 << p;
for (int i = 1; i <= n - q + 1; ++i) rmq[p][i] = min(rmq[p - 1][i], rmq[p - 1][i + q / 2]);
}
}
int rangemin(int a, int b) {
int p;
for (p = 0; (1 << (p + 1)) <= (b - a + 1); ++p);
return min(rmq[p][a], rmq[p][b - (1 << p) + 1]);
}
void solve() {
int a, b;
for (int i = 1; i <= m; ++i) {
fin >> a >> b;
fout << rangemin(a, b) << '\n';
}
}
int main() {
input();
init();
solve();
}