Pagini recente » Cod sursa (job #2221632) | Cod sursa (job #1624080) | Cod sursa (job #2816692) | Cod sursa (job #2763487) | Cod sursa (job #2974769)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX = 1e5;
const int LOGMAX = 17;
int N, M;
int v[NMAX + 1];
int rasp[LOGMAX + 1][NMAX + 1];
int lg2[NMAX + 1];
int main() {
fin >> N >> M;
for(int i = 1; i <= N; i++) {
fin >> v[i];
}
for(int j = 1; j <= N; j++) {
rasp[0][j] = v[j];
}
for(int i = 1; (1 << i) <= N; i++) {
for(int j = 1; j + (1 << i) - 1 <= N; j++) {
rasp[i][j] = min(rasp[i - 1][j], rasp[i - 1][j + (1 << (i - 1))]);
}
}
lg2[1] = 0;
for(int i = 2; i <= N; i++) {
lg2[i] = lg2[i / 2] + 1;
}
for(int i = 1; i <= M; i++) {
int x, y;
fin >> x >> y;
int lg = y - x + 1;
// int k = __lg(lg);
int k = lg2[lg];
fout << min(rasp[k][x], rasp[k][y - (1 << k) + 1]) << '\n';
}
return 0;
}