Pagini recente » Cod sursa (job #1419995) | Cod sursa (job #58543) | Cod sursa (job #1911504) | Cod sursa (job #906399) | Cod sursa (job #3148333)
#include <fstream>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
static constexpr int NMAX = ((int)(1e5) + 1);
static constexpr int LOGMAX = 17;
int n, m;
int rmq[LOGMAX][NMAX];
int Log[NMAX];
static inline void read()
{
f.tie(nullptr);
f >> n >> m;
for (int i = 1; i <= n; ++i)
{
f >> rmq[0][i];
if (i > 1)
Log[i] = 1 + Log[(i >> 1)];
}
return;
}
static inline int my_min(const int &a, const int &b)
{
return ((a < b) ? a : b);
}
static inline int query(int l, int r)
{
int k = Log[(r - l + 1)];
return my_min(rmq[k][l], rmq[k][(r - (1 << k) + 1)]);
}
static inline void solve()
{
for (int i = 1; i <= m; ++i)
{
int l = 0, r = 0;
f >> l >> r;
g << query(l, r) << '\n';
}
return;
}
int main()
{
read();
for (int i = 1; i <= Log[n]; ++i)
{
int length = (1 << i);
for (int j = 1; j <= (n - length + 1); ++j)
rmq[i][j] = my_min(rmq[i - 1][j], rmq[i - 1][(j + (length >> 1))]);
}
solve();
return 0;
}