Pagini recente » Cod sursa (job #2963607) | Cod sursa (job #1063867) | Cod sursa (job #2693387) | Cod sursa (job #1564799) | Cod sursa (job #2787491)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int rmq[100002][30];
int pw[100002];
int main() {
int n, m;
cin >> n >> m;
int put = 0, p = 1;
for (int i = 1; i <= n; i++) {
cin >> rmq[i][0];
if (p * 2 <= i) {
put++;
p *= 2;
}
pw[i] = put;
}
for (int lg = 2, j = 1; lg <= n; lg *= 2, j++) {
for (int i = 1; i + lg - 1 <= n; i++) {
rmq[i][j] = min(rmq[i][j - 1], rmq[i + lg / 2][j - 1]);
}
}
while (m != 0) {
m--;
int x, y;
cin >> x >> y;
int lg = y - x + 1;
int raspst = rmq[x][pw[y - x + 1]];
int raspdr = rmq[y - (1 << pw[y - x + 1]) + 1][pw[y - x + 1]];
cout << min(raspst, raspdr)<<'\n';
}
}