Pagini recente » Cod sursa (job #801724) | Cod sursa (job #2195645) | Cod sursa (job #2297428) | Cod sursa (job #1867183) | Cod sursa (job #1251128)
#include <fstream>
#define Nmax 100100
#define Lmax 18
#define log2 Log2[B - A + 1]
using namespace std;
int N;
class Rmq {
private:
int Rmq[Lmax][Nmax], Log2[Nmax];
public:
void insert(int X, int Value) {
Rmq[0][X] = Value;
}
void process() {
int i, j;
for(i = 2; i <= N; i++)
Log2[i] = Log2[i >> 1] + 1;
for(i = 1; (1 << i) <= N; i++)
for(j = 1; j <= N - (1 << i) + 1; j++)
Rmq[i][j] = min(Rmq[i - 1][j], Rmq[i-1][j + (1 << (i - 1))]);
}
int query(int A, int B) {
return min(Rmq[log2][A], Rmq[log2][B - (1 << log2) + 1]);
}
} rmq;
int main() {
int i, x, y, M;
ifstream in("rmq.in");
ofstream out("rmq.out");
in >> N >> M;
for(i = 1; i <= N; i++) {
in >> x;
rmq.insert(i, x);
}
rmq.process();
while(M--) {
in >> x >> y;
out << rmq.query(x, y) << '\n';
}
in.close();
out.close();
return 0;
}