Pagini recente » Cod sursa (job #101461) | Cod sursa (job #2440663) | Cod sursa (job #3149473) | Cod sursa (job #1061517) | Cod sursa (job #2298328)
#include <bits/stdc++.h>
#define MAXN 100005
#define LOGN 18
int N, M;
int RMQ[LOGN][MAXN];
int log2(int x) {
if (x == 1) return 0;
return 1 + log2(x/2);
}
void ComputeRMQ() {
for (int i=1, j; (1<<i) <= N; ++i)
for (j=1; j+i-1 <= N; ++j)
RMQ[i][j] = std::min(RMQ[i-1][j], RMQ[i-1][j+(1<<(i-1))]);
}
int Query(int Left, int Right) {
int log = log2(Right-Left+1);
return std::min(RMQ[log][Left], RMQ[log][Right-(1<<log)+1]);
}
std::ifstream In("rmq.in");
std::ofstream Out("rmq.out");
void Citire() {
In >> N >> M;
for (int i=1; i<=N; ++i)
In >> RMQ[0][i];
}
void Rezolvare() {
ComputeRMQ();
int x, y;
while (M--)
In >> x >> y,
Out << Query(x, y) << '\n';
}
int main()
{
Citire();
Rezolvare();
return 0;
}