Pagini recente » Cod sursa (job #1721912) | Cod sursa (job #3220367) | Cod sursa (job #1758169) | Cod sursa (job #2410034) | Cod sursa (job #3277450)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
const int NMAX = 100001, BMAX = 17;
int rmq[NMAX][BMAX];///rmq[i][j] - minimul pe intervalul [i, i + (1<<j))
int log2[NMAX];
int main()
{
int n, Q;
f >> n >> Q;
f >> rmq[1][0];
for (int i = 2; i <= n; i++)
{
f >> rmq[i][0];
log2[i] = log2[i / 2] + 1;
}
/// [ n - 2^bit, n)
for (int bit = 1; bit <= log2[n]; bit++)
{
int rightBoundary = n - (1 << bit) + 1;
for (int i = 1; i <= rightBoundary; i++)
{
rmq[i][bit] = min (rmq[i][bit - 1], rmq[i + (1 << (bit - 1))][bit - 1]);
}
}
while (Q--)
{
int x, y;
f >> x >> y;
int lgInterval = y - x + 1;
int bit = log2 [lgInterval];
g << min (rmq[x][bit], rmq[y + 1 - (1 << bit)][bit]) << '\n';
}
return 0;
}