Pagini recente » Cod sursa (job #2060824) | Cod sursa (job #2907828) | Cod sursa (job #1327679) | Cod sursa (job #2796366) | Cod sursa (job #2626328)
#include <iostream>
#include <fstream>
#define lim 100002
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, v[lim], x, y, M[lim][18], lg[lim], l;
int main()
{
f >> n >> m;
for (int i = 0; i < n; i++)
f >> v[i];
for (int i = 0; i < n; i++)
M[i][0] = i;
for (int j = 1; (1 << j) <= n; j++)
for (int i = 0; i + (1 << j) - 1 < n; i++)
if (v[M[i][j - 1]] < v[M[i + (1 << (j - 1))][j - 1]])
M[i][j] = M[i][j - 1];
else M[i][j] = M[ i + (1 << (j - 1))][j - 1];
lg[1] = 0;
for (int i = 2;i < n; i ++)
lg[i] = lg[i / 2] + 1;
for (int k = 0; k < m; k++)
{
f >> x >> y;
--x;
--y;
l=lg[y - x + 1];
g << min(v[M[x][l]], v[M[y - (1 << l) + 1][l]]) << '\n';
}
f.close();
g.close();
return 0;
}