Pagini recente » Cod sursa (job #3357986) | Cod sursa (job #3314836) | Cod sursa (job #3357931) | Cod sursa (job #3357980) | Cod sursa (job #3357953)
#include <cstdio>
#include <algorithm>
using namespace std;
const int SIZE = 1 << 20;
char in[SIZE];
int in_pos = 0, in_len = 0;
inline char get_char() {
if (in_pos == in_len) {
in_pos = 0;
in_len = fread(in, 1, SIZE, stdin);
if (in_len == 0) return EOF;
}
return in[in_pos++];
}
inline int read_int() {
int x = 0;
char c;
while ((c = get_char()) < '0' || c > '9') {
if (c == EOF) return 0;
}
do {
x = x * 10 + (c - '0');
} while ((c = get_char()) >= '0' && c <= '9');
return x;
}
char out[1 << 20];
int out_pos = 0;
inline void flush_out() {
fwrite(out, 1, out_pos, stdout);
out_pos = 0;
}
inline void write_int(int x) {
char temp[10];
int len = 0;
if (x == 0) {
out[out_pos++] = '0';
} else {
while (x > 0) {
temp[len++] = (x % 10) + '0';
x /= 10;
}
while (len > 0) {
out[out_pos++] = temp[--len];
}
}
out[out_pos++] = '\n';
if (out_pos >= 1 << 19) {
flush_out();
}
}
int n, m;
int st[18][100005];
int lg[100005];
int main() {
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
n = read_int();
m = read_int();
for (int i = 1; i <= n; i++) {
st[0][i] = read_int();
}
for (int i = 2; i <= n; i++) {
lg[i] = lg[i / 2] + 1;
}
for (int k = 1; (1 << k) <= n; k++) {
for (int i = 1; i + (1 << k) - 1 <= n; i++) {
st[k][i] = min(st[k-1][i], st[k-1][i + (1 << (k-1))]);
}
}
for (int i = 0; i < m; i++) {
int x = read_int();
int y = read_int();
int l = lg[y - x + 1];
write_int(min(st[l][x], st[l][y - (1 << l) + 1]));
}
flush_out();
return 0;
}