Pagini recente » Cod sursa (job #2050245) | Cod sursa (job #847896) | Cod sursa (job #1793648) | Cod sursa (job #2035254) | Cod sursa (job #2080702)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
const int NMAX = 100000 + 1;
const int PMAX = 17;
int n, m;
int v[NMAX];
int logaritm[NMAX];
int rmq[PMAX][NMAX];
void citeste() {
f >> n >> m;
for (int i = 1; i <= n; i++)
f >> rmq[0][i];
}
void init_rmq() {
for (int i = 2; i <= n; i++) logaritm[i] = logaritm[i / 2] + 1;
for (int p = 1; 1 << p <= n; p++) {
int l = 1 << (p - 1);
for (int i = 1; i <= n - l + 1; i++) {
rmq[p][i] = min(rmq[p - 1][i], rmq[p - 1][i + l]);
}
}
}
int query(int a, int b) {
int l = b - a + 1;
int p = logaritm[l];
return min(rmq[p][a], rmq[p][b - (1 << p) + 1]);
}
void rezolva() {
int a, b;
for (int i = 1; i <= m; i++) {
f >> a >> b;
g << query(a, b) << '\n';
}
}
int main() {
citeste();
init_rmq();
rezolva();
return 0;
}