Pagini recente » Cod sursa (job #2315792) | Cod sursa (job #2080789) | Cod sursa (job #1984950) | Cod sursa (job #2222836) | Cod sursa (job #2284572)
#include <bits/stdc++.h>
#define MAXN 100005
#define LOGMAX 18
inline int log2(int x) {
if (x == 1) return 0;
return 1 + log2(x/2);
}
int N, M;
int V[MAXN];
int RMQ[LOGMAX][MAXN];
void ComputeRMQ() {
for (int i=1; i<=N; ++i)
RMQ[0][i] = V[i];
for (int i=1, j, p=2; p<=N; ++i, p*=2)
for (j=1; j+p-1<=N; ++j)
RMQ[i][j] = std::min(RMQ[i-1][j], RMQ[i-1][j+p/2]);
}
int RMQQuery(int X, int Y) {
int log = log2(Y-X+1);
return std::min(RMQ[log][X], RMQ[log][Y-(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 >> V[i];
}
void Rezolvare() {
ComputeRMQ();
int X, Y;
while (M--) {
In >> X >> Y;
Out << RMQQuery(X, Y) << '\n';
}
}
int main()
{
Citire();
Rezolvare();
return 0;
}