Pagini recente » Cod sursa (job #928752) | Cod sursa (job #2840987) | Cod sursa (job #3156104) | Cod sursa (job #3179416) | Cod sursa (job #2376273)
#include <bits/stdc++.h>
#define MAXN 100005
#define LOGN 18
int N, M;
int LOG2[MAXN];
int RMQ[LOGN][MAXN];
void ComputeLOG2() {
for (int i=2; i<=N; ++i)
LOG2[i] = LOG2[i/2] + 1;
}
void ComputeRMQ() {
for (int i=1, j; (1<<i) <= N; ++i)
for (j=1; j + (1<<i)-1 <= N; ++j)
RMQ[i][j] = std::min(RMQ[i-1][j], RMQ[i-1][j + (1<<(i-1))]);
}
int Query(int X, int Y) {
if (X > Y) std::swap(X, Y);
int K = LOG2[Y-X+1];
return std::min(RMQ[K][X], RMQ[K][Y - (1<<K)+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() {
ComputeLOG2();
ComputeRMQ();
int X, Y;
while (M--)
In >> X >> Y, Out << Query(X, Y) << '\n';
}
int main()
{
Citire();
Rezolvare();
return 0;
}