Pagini recente » Cod sursa (job #2615444) | Cod sursa (job #2109193) | Cod sursa (job #1541191) | Cod sursa (job #1724496) | Cod sursa (job #2616872)
#include <fstream>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
int n, m, st, dr, dif, p, minm, p2;
int Min[100001][18];
int main()
{
f >> n >> m;
for (int i = 1; i <= n; ++i)
f>> Min[i][1];
for (int d = 1, j = 2; d <= n; d *= 2, ++j)
{
for (int i = 1; i + d - 1 <= n; ++i)
Min[i][j] = min(Min[i][j - 1], Min[i + d][j - 1]);
}
for (int i = 1; i <= m; ++i)
{
f >> st >> dr;
dif = dr - st + 1;
p = 0;
p2 = 1;
while (dif)
{
dif /= 2;
++p;
p2 *= 2;
}
p2 /= 2;
minm = min(Min[st][p], Min[dr - p2 + 1][p]);
g << minm << '\n';
}
}