Pagini recente » Istoria paginii runda/prime/clasament | concurs1cls | tema | tema | Cod sursa (job #2511326)
#include <fstream>
#include <cmath>
#define MAXN 100005
#define MAXLOGN 25
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int M[MAXN][MAXLOGN], A[MAXN];
int N, m;
void citire() {
fin >> N >> m;
for (int i = 1; i <= N; ++i) {
fin >> A[i];
}
}
void preProcess() {
for (int i = 1; i <= N; ++i) {
M[i][0] = A[i];
}
for (int j = 1; (1 << j) <= N; ++j) {
for (int i = 0; i + (1 << j) - 1 <= N; ++i) {
M[i][j] = min(M[i + (1 << (j - 1))][j - 1], M[i][j - 1]);
}
}
}
int query(int i, int j) {
int k = log2(j - i + 1);
return min(M[i][k], M[j - (1 << k) + 1][k]);
}
int main()
{
citire();
preProcess();
int x, y;
for (int i = 0; i < m; ++i) {
fin >> x >> y;
fout << query(x, y) << "\n";
}
return 0;
}