Pagini recente » Cod sursa (job #618586) | Cod sursa (job #2460684) | Cod sursa (job #1459762) | Cod sursa (job #2881420) | Cod sursa (job #2228323)
#include <bits/stdc++.h>
using namespace std;
const int N = 100005, LG = 18;
int rm[LG][N], v[N];
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int n, m, x, y, w;
scanf("%d%d", &n, &m);
for (int i = 1; i <= n; i++) {
w = i;
while(w > 1) {
w = w / 2;
v[i]++; } }
for (int i = 1; i <= n; i++) {
scanf("%d", &rm[0][i]); }
for (int lg = 1; lg < LG; lg++)
for (int i = 1; i + (1 << lg) - 1 <= n; i++)
rm[lg][i] = min(rm[lg - 1][i], rm[lg - 1][i + (1 << (lg - 1))]);
for (int i = 1; i <= m; i++) {
scanf("%d %d", &x, &y);
printf("%d\n", min(rm[v[y - x + 1]][x], rm[v[y - x + 1]][y - (1 << v[y - x + 1]) + 1])); }
return 0; }