Pagini recente » Cod sursa (job #112233) | Cod sursa (job #2398354) | Cod sursa (job #883240) | Cod sursa (job #1716651) | Cod sursa (job #1339252)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
const int MAXN = 100010;
int RMQ[17][MAXN];
int Log[MAXN];
inline int mn (const int &A, const int &B)
{
if (A < B)
return A;
return B;
}
int main()
{
int N, M, i, j;
int a, b;
int dif;
in >> N >> M;
for (i = 1; i <= N; i ++){
in >> RMQ[0][i];
if (i != 1)
Log[i] = Log[i >> 1] + 1;
}
for (i = 1; (1 << i) <= N; i ++)
for (j = 1; j + (1 << i) - 1 <= N; j ++){
a = RMQ[i - 1][j];
b = RMQ[i - 1][j + (1 << (i - 1))];
RMQ[i][j] = mn (a, b);
}
for (i = 1; i <= M; i ++){
in >> a >> b;
dif = b - a + 1;
dif = Log[dif];
out << mn (RMQ[dif][a], RMQ[dif][b - (1 << dif) + 1]) << "\n";
}
return 0;
}