Pagini recente » Cod sursa (job #2841447) | Cod sursa (job #2655950) | Cod sursa (job #1678183) | Cod sursa (job #2882252) | Cod sursa (job #2360596)
#include <fstream>
#include <cmath>
using namespace std;
ifstream in ( "rmq.in" );
ofstream out ( "rmq.out" );
const int N_MAX = 100005;
const int LOG2_MAX = 18;
int N;
int RMQ[N_MAX][LOG2_MAX];
int main() {
int m;
in >> N >> m;
for (int i = 1; i <= N; ++i)
in >> RMQ[i][0];
for (int j = 1; 1 << j <= N; ++j)
for (int i = 1; i + (1 << j) - 1 <= N; ++i)
RMQ[i][j] = min(RMQ[i][j - 1], RMQ[i + (1 << (j - 1))][j - 1]);
while (m--) {
int x, y;
in >> x >> y;
int d = y - x + 1;
int ld = log2(d);
out << min(RMQ[x][ld], RMQ[y - (1 << ld) + 1][ld]) << '\n';
}
}