Pagini recente » Cod sursa (job #1952235) | Cod sursa (job #1777986) | Cod sursa (job #1729925) | Cod sursa (job #1274824) | Cod sursa (job #1174537)
#include <fstream>
#include <math.h>
using namespace std;
const int Nmax = 100005;
int A[Nmax];
int B[Nmax][17];
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[i][0] = A[i];
for(int p = 1; p < 17; p++)
for(int i = 0; i < N; i++)
{
B[i][p] = B[i][p-1];
if (i+(1<<(p-1)) < N)
B[i][p] = min(B[i][p], B[i+(1<<(p-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[a][p], B[b+1-(1<<p)][p]) << '\n';
}
return 0;
}