Pagini recente » Cod sursa (job #2950794) | Cod sursa (job #2655698) | Cod sursa (job #1751949) | Cod sursa (job #2316849) | Cod sursa (job #2616591)
#include <bits/stdc++.h>
using namespace std;
#define itr(type, i, s, d) for (type i = s; i < d; ++i)
#define itrr(i, s, d) for (register int i = s; i < d; ++i)
#define pb(i) push_back(i)
#define IO ios_base :: sync_with_stdio(false); \
cin.tie(nullptr);
#define vi vector <int>
#define rvi(s, d, v) \
itrr(i, s, d) \
cin >> v.at(i);
#define show(v) \
cout << "Debug:\n"; \
for (auto it = v.begin(); it != v.end(); ++it) \
cout << *it << " "; \
cout << "\n";
#define vitr(v, it) \
for (auto it = v.begin(); it != v.end(); ++it)
typedef long long ll;
int main() {
IO;
freopen("rmq.in", "r", stdin);
freopen("rmq.out", "w", stdout);
int N, M, L, R, K, lg;
scanf("%d %d", &N, &M);
K = ceil(log2(N));
vector <int> vec(N);
itrr(i, 0, N)
scanf("%d", &vec[i]);
vector <int> Logs(N + 1);
Logs.at(1) = 0;
itrr(i, 2, N + 1)
Logs.at(i) = Logs.at(i / 2) + 1;
int dp[N + 1][K + 1];
itrr(i, 0, N)
dp[i][0] = vec.at(i);
itrr(j, 1, K + 1)
for (int i = 0; i + (1 << j) <= N; ++i)
dp[i][j] = min(dp[i][j - 1], dp[i + (1 << (j - 1))][j - 1]);
while (M--) {
scanf("%d %d", &L, &R);
L--;
R--;
lg = Logs[R - L + 1];
printf("%d\n", min(dp[L][lg], dp[R - (1 << lg) + 1][lg]));
}
return 0;
}