Pagini recente » Cod sursa (job #340917) | Cod sursa (job #1286420) | Cod sursa (job #1273548) | | Cod sursa (job #1591471)
#include <fstream>
#define NMax 100010
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, queries, lg[NMax], RMQ[17][NMax];
int getMin(int a, int b)
{
if (a < b)
return a;
return b;
}
void preprocess()
{
for (int i = 2; i <= n; i++)
lg[i] = lg[i / 2] + 1;
for (int i = 1; i <= lg[n]; i++)
for (int j = 1; j <= n - (1 << i) + 1; j++)
RMQ[i][j] = getMin(RMQ[i - 1][j], RMQ[i - 1][j + (1 << (i - 1))]);
}
int main()
{
f >> n >> queries;
for (int i = 1; i <= n; i++) {
f >> RMQ[0][i];
}
preprocess();
int a, b;
for (int i = 1; i <= queries; i++) {
f >> a >> b;
int line = lg[b - a + 1];
g << getMin(RMQ[line][a], RMQ[line][b - (1<<line) + 1]) << "\n";
}
}