Pagini recente » Cod sursa (job #3178511) | Cod sursa (job #1230220) | Cod sursa (job #1396415) | Cod sursa (job #774373) | Cod sursa (job #2757121)
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;
int DP[17][100005];
int main()
{
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int N, M;
scanf("%d%d", &N, &M);
for (int i = 1; i <= N; ++i)
scanf("%d", &DP[0][i]);
for (int step = 1; step <= 16; ++step) {
int delta = 1 << (step - 1);
for (int i = 1; i <= N; ++i)
if (i + delta > N)
DP[step][i] = DP[step][i - 1];
else
DP[step][i] = min(DP[step - 1][i], DP[step - 1][i + delta]);
}
for (int t = 0; t < M; ++t) {
int a, b;
scanf("%d%d", &a, &b);
double len = b - a + 1;
int delta = floor(log2(len));
int step = 1 << delta;
if (step == len)
printf("%d\n", DP[delta][a]);
else
printf("%d\n", min(DP[delta][a], DP[delta][b - step + 1]));
}
return 0;
}