Pagini recente » Istoria paginii runda/haicatrebuiesatrebuiasca | Cod sursa (job #2177711)
#include <fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int N, M, _log2[100003], rm[20][100003];
inline int min(int a, int b) {
return (a < b ? a : b);
}
int main() {
_log2[0] = -1;
fin >> N >> M;
for(int i = 1; i <= N; ++i) {
fin >> rm[0][i];
_log2[i] = 1 + _log2[i >> 1];
}
for (int i = 1; i <= _log2[N]; ++i) {
for (int j = 1; j <= N - (1 << i) + 1; ++j) {
rm[i][j] = min(rm[i - 1][j], rm[i - 1][j + (1 << (i-1) ) ]);
}
}
int x, y;
while (M--) {
fin >> x >> y;
int l = _log2[y - x + 1];
fout << min(rm[l][x], rm[l][y - (1<<(l)) + 1]) << '\n';
}
fout.close();
return 0;
}