Pagini recente » Cod sursa (job #939377) | Cod sursa (job #3138240) | Cod sursa (job #1357562) | Cod sursa (job #2661548) | Cod sursa (job #2819658)
#include <bits/stdc++.h>
using namespace std;
#define x1 "rmq.in"
#define x2 "rmq.out"
ifstream in(x1);
ofstream out(x2);
#define MAXN 100000
#define MAXL 17
int v[MAXN], rmq[MAXN][MAXL], lg2[MAXN], n;
void prelog() {
lg2[1] = 0;
for(int i = 2; i <= n; i++)
lg2[i] = lg2[i / 2] + 1;
}
inline int cond(int a, int b) {
return a < b ? a : b;
}
void build() {
for(int i = 0; i < n; i++)
rmq[i][0] = v[i];
for(int j = 1; j <= MAXL; j++)
for(int i = 0; i + (1 << j) - 1 < n; i++)
rmq[i][j] = cond(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
}
int query(int st, int dr) {
int lg = lg2[dr - st + 1];
return cond(rmq[st][lg], rmq[dr - (1 << lg) + 1][lg]);
}
int main() {
int a, b, i, q;
in >> n >> q;
for(i = 0; i < n; i++)
in >> v[i];
prelog();
build();
while(q--) {
in >> a >> b;
out << query(a - 1, b - 1) << '\n';
}
return 0;
}