Pagini recente » Cod sursa (job #1910024) | Cod sursa (job #158788) | Cod sursa (job #2215083) | Cod sursa (job #1518175) | Cod sursa (job #1323151)
/*
Keep It Simple!
*/
#include <fstream>
#define minV(a,b) ((a)<(b)?(a):(b))
using namespace std;
const int kMax_N = 100005;
int n, q;
int value[kMax_N], lg[kMax_N], rmq[kMax_N][30];
ifstream fin("rmq.in");
ofstream fout("rmq.out");
void ComputeLg()
{
lg[1] = 0;
for (int i = 2; i <= kMax_N; ++i)
lg[i] = lg[i >> 1] + 1;
}
void Solve()
{
ComputeLg();
fin >> n >> q;
for (int i = 1; i <= n; ++i)
fin >> value[i];
for (int i = 1; i <= n; ++i)
rmq[i][0] = value[i];
for (int j = 1; (1 << j) <= n; ++j)
for (int i = 1; i + (1 << j) - 1 <= n; ++i)
rmq[i][j] = minV(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j-1]);
int x, y, k;
for (int i = 1; i <= q; ++i)
{
fin >> x >> y;
k = lg[y - x + 1];
fout << minV(rmq[x][k], rmq[x + (1 << (k-1))][k]) << '\n';
}
}
int main()
{
Solve();
return 0;
}