Pagini recente » Cod sursa (job #2183584) | Cod sursa (job #2277322) | Cod sursa (job #2477546) | Cod sursa (job #534831) | Cod sursa (job #2221298)
#include <iostream>
#include <fstream>
//#include <cmath>
using namespace std;
const int NMAX = 100001;
const int KMAX = 17; //~log2(NMAX)
ifstream f("rmq.in");
ofstream g("rmq.out");
int D[KMAX][NMAX];
char lg2[NMAX];
int main()
{
int N, M, x, y;
f >> N >> M;
lg2[0] = -1;
for(int i = 1; i <= N; i++)
{
f >> D[0][i];
lg2[i] = lg2[i >> 1] + 1;
}
lg2[0] = 0;
//
for(int i = 1; (1 << i) <= N; i++)
for(int j = 1; j + (1 << i) - 1 <= N; j++)
{
int i1 = i - 1;
D[i][j] = min(D[i1][j], D[i1][j + (1 << i1)]);
}
//
while(M--)
{
f >> x >> y;
int l = lg2[y - x];
g << min(D[l][x], D[l][y - (1 << l) + 1]) << '\n';
}
return 0;
}