Pagini recente » Cod sursa (job #1666290) | Cod sursa (job #628667) | Cod sursa (job #1509626) | Cod sursa (job #238639) | Cod sursa (job #1518922)
#include <fstream>
#include <sstream>
const int mnr = 100000 + 2, lgm = 18;
int rmq[lgm][mnr], lg[mnr], n, m, i, j, x, y, t;
std::stringstream res;
std::fstream in("rmq.in", std::fstream::in), out("rmq.out", std::fstream::out);
inline int minu(int x, int y)
{
return (x < y) ? x : y;
}
int main()
{
in >> n >> m;
for (i = 1; i <= n; ++i) in >> rmq[0][i];
lg[1] = 0;
for (i = 2; i <= n; ++i) lg[i] = lg[i / 2] + 1;
for (i = 1; (1 << i) <= n; ++i)
for (j = 1;j <= n - (1 << i) + 1; ++j)
rmq[i][j] = minu(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
for (; m > 0; --m)
{
in >> x >> y;
j = y - x + 1;
res << minu(rmq[lg[j]][x], rmq[lg[j]][x + j - (1 << lg[j])]) << "\n";
}
out << res.str();
return 0;
}