Pagini recente » Cod sursa (job #512316) | Monitorul de evaluare | Cod sursa (job #3194071) | Cod sursa (job #1902145) | Cod sursa (job #1380076)
#include <fstream>
#include <algorithm>
const int MAX_N(100001);
const int MAXLOG(18);
int Rmq [MAXLOG] [MAX_N];
int Log [MAX_N];
int n;
inline void Build (void)
{
for (int i(2) ; i <= n ; ++i)
Log[i] = Log[i / 2] + 1;
for (int i(1) ; i <= Log[n] ; ++i)
for (int j(1) ; j <= n - (1 << i) + 1 ; ++j)
Rmq[i][j] = std::min(Rmq[i - 1][j],Rmq[i - 1][j + (1 << (i - 1))]);
}
inline int Query (int l, int r)
{
int length(r - l + 1);
return std::min(Rmq[Log[length]][l],Rmq[Log[length]][r - (1 << Log[length]) + 1]);
}
int main (void)
{
std::ifstream input("rmq.in");
int m;
input >> n >> m;
for (int i(1) ; i <= n ; ++i)
input >> Rmq[0][i];
Build();
std::ofstream output("rmq.out");
int x, y;
while (m)
{
input >> x >> y;
output << Query(x,y) << '\n';
--m;
}
input.close();
output.close();
return 0;
}