Pagini recente » Cod sursa (job #156280) | Cod sursa (job #881246) | Cod sursa (job #1808413) | Cod sursa (job #661570) | Cod sursa (job #1174539)
#include <fstream>
#include <math.h>
using namespace std;
const int Nmax = 100005;
int A[Nmax];
int B[17][Nmax];
inline int min(int x, int y) { return x < y ? x : y; }
int main()
{
ifstream f ("rmq.in");
ofstream g ("rmq.out");
int N,M;
f >> N >> M;
for (int i = 0; i < N; i++)
{
f >> A[i];
}
for(int i = 0; i < N; i++)
B[0][i] = A[i];
for(int p = 1; p < 17; p++)
for(int i = 0; i < N; i++)
{
B[p][i] = B[p-1][i];
if (i+(1<<(p-1)) < N)
B[p][i] = min(B[p][i], B[p-1][i+(1<<(p-1))]);
}
int a, b;
for (int i = 0; i < M; i++)
{
f >> a >> b;
a--; b--;
int p = floor(log2(b-a+1));
g << min(B[p][a], B[p][b+1-(1<<p)]) << '\n';
}
return 0;
}