Pagini recente » Diferente pentru problema/paralelogram2 intre reviziile 24 si 23 | Cod sursa (job #1932821) | Diferente pentru problema/beyond_the_wall intre reviziile 22 si 23 | Diferente pentru problema/subsir100 intre reviziile 2 si 3 | Cod sursa (job #1518956)
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n, m, Log[100010], V[20][100010];
int main()
{
fin >> n >> m;
Log[0] = -1;
for (int i = 1; i <= n; i ++)
{
fin >> V[0][i];
Log[i] = Log[i / 2] + 1;
}
for (int i = 1; i <= Log[n]; i ++)
{
for (int j1 = 1; j1 <= n - (1 << i) + 1; j1 ++)
{
int j2 = (1 << (i - 1));
V[i][j1] = min(V[i - 1][j1], V[i - 1][j1 + j2]);
}
}
int x, y;
while (m --)
{
fin >> x >> y;
int lin = Log[y - x + 1];
fout << min(V[lin][x], V[lin][y - (1 << lin) + 1]) << '\n';
}
return 0;
}