Pagini recente » Cod sursa (job #1636358) | Cod sursa (job #2710299) | Cod sursa (job #3306882) | Borderou de evaluare (job #1299646) | Cod sursa (job #3305291)
#include <bits/stdc++.h>
#define NMAX 100000
#define MMAX 18
#define MOD 666013
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, cn, m, x, y;
int rmq[NMAX + 2][MMAX], expo[NMAX + 2];
void RMQ() {
for (int j = 1; j < MMAX; j++) {
cn -= (1 << (j - 1));
for (int i = 1; i <= cn; i++) {
rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
}
}
}
void calc_exp() {
for (int i = 2; i <= n; i++) {
expo[i] = expo[(i >> 1)] + 1;
}
}
int main() {
ios_base::sync_with_stdio(false);
fin.tie(NULL);
fout.tie(NULL);
fin >> n >> m;
cn = n;
for (int i = 1; i <= n; i++) {
fin >> rmq[i][0];
}
RMQ();
calc_exp();
while (m--) {
fin >> x >> y;
int e = expo[y - x + 1];
int lg = (1 << e);
fout << min(rmq[x][e], rmq[y - lg + 1][e]) << '\n';
}
return 0;
}