Pagini recente » Cod sursa (job #803046) | Cod sursa (job #1539044) | Cod sursa (job #2513699) | Cod sursa (job #1316637) | Cod sursa (job #2831546)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
const int NMAX = 1e5 + 5;
int rmq[NMAX][int(log2(NMAX)) + 2];
int n, m;
inline void citire()
{
fin >> n >> m;
int i;
for(i = 1; i <= n; ++i)
fin >> rmq[i][0];
}
inline void precalc_rmq()
{
int i, j;
for(j = 1; (1ll << j) <= n; ++j)
{
for(i = 1; i + (1ll << j) - 1 <= n; ++i)
rmq[i][j] = min (rmq[i][j-1], rmq[i + (1ll << (j-1))][j-1]);
}
}
inline int query_rmq(int st, int dr)
{
int lmax = log2 (dr - st + 1), sol;
sol = rmq[st][lmax];
sol = min(sol, rmq[dr - (1ll << lmax) + 1][lmax]);
return sol;
}
void answer_queries()
{
int i, left, right;
for(i = 1; i <= m; ++i)
{
fin >> left >> right;
fout << query_rmq(left, right) << '\n';
}
}
int main()
{
citire();
precalc_rmq();
// for(int j = 0; (1ll << j) <= n; ++j)
// {
// fout << j << '\n';
//
// for(int i = 1; i + (1ll << j) - 1<= n; ++i)
// fout << rmq[i][j] << ' ';
//
// fout << '\n';
// }
//
// for(int i = 1; i <= n; ++i)
// fout << rmq[i][0] << ' ';
answer_queries();
return 0;
}