Pagini recente » Cod sursa (job #373546) | Cod sursa (job #1663971) | Cod sursa (job #1750795) | Cod sursa (job #221206) | Cod sursa (job #3227556)
#include <bits/stdc++.h>
using namespace std;
#define int long long int
#define N 100005
int n, m, r[18][N], E[N];
int get_min(int left, int right) {
int length = right - left + 1;
int closest_power = E[length];
return min(r[closest_power][left], r[closest_power][right - (1 << (closest_power)) + 1]);
}
signed main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
cin.tie(0)->sync_with_stdio(false);
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> r[0][i];
E[1] = 0;
for (int i = 2; i <= n; i++)
E[i] = E[i / 2] + 1;
for (int i = 1; (1 << i) <= n; i++) {
for (int j = 1; j <= n; j++) {
r[i][j] = r[i - 1][j];
if (j + (1 << (i - 1)) <= n)
r[i][j] = min(r[i][j], r[i - 1][j + (1 << (i - 1))]);
}
}
while (m--) {
int x, y;
cin >> x >> y;
cout << get_min(x, y) << '\n';
}
return 0;
}