Pagini recente » Cod sursa (job #1985796) | Cod sursa (job #95156) | Cod sursa (job #1695191) | Cod sursa (job #2158541) | Cod sursa (job #2228322)
#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[x]][x], rm[v[x]][y - (1 << v[x]) + 1])); }
return 0; }