Pagini recente » Cod sursa (job #2670234) | Cod sursa (job #2910200) | Cod sursa (job #2719379) | Cod sursa (job #954500) | Cod sursa (job #1411446)
#include <fstream>
#include <algorithm>
const int MAX_N(100005);
const int MAX_LOG(17);
int n, m;
int Dp [MAX_LOG] [MAX_N];
int Log [MAX_N];
inline void Init (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)
Dp[i][j] = std::min(Dp[i - 1][j],Dp[i - 1][j + (1 << (i - 1))]);
}
inline int Rmq (int ql, int qr)
{
int len(qr - ql + 1);
return std::min(Dp[Log[len]][ql],Dp[Log[len]][qr - (1 << Log[len]) + 1]);
}
int main (void)
{
std::ifstream input("rmq.in");
std::ofstream output("rmq.out");
input >> n >> m;
for (int i(1) ; i <= n ; ++i)
input >> Dp[0][i];
Init();
int x, y;
while (m--)
{
input >> x >> y;
output << Rmq(x,y) << '\n';
}
input.close();
output.close();
return 0;
}