Pagini recente » Cod sursa (job #2675992) | Cod sursa (job #2588047) | Cod sursa (job #1571524) | Cod sursa (job #871143) | Cod sursa (job #2015172)
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
const int INF = 1e9;
int sol(int a, int b, vector < vector < int > > &dp) {
int d = b - a + 1;
int l = log2(d);
int s2 = b - (1 << l) + 1;
return min(dp[l][a], dp[l][s2]);
}
int main() {
int n, m;
cin >> n >> m;
vector < int > v(n + 1);
for (int i = 1; i <= n; i ++) {
cin >> v[i];
}
vector < vector < int > > dp(floor(log2(n)) + 1, vector < int > (n + 1, INF));
for (int i = 1; i <= n; i ++) {
dp[0][i] = v[i];
}
for (int i = 1; i <= (int)log2(n); i ++) {
for (int j = 1; j <= n; j ++) {
int l = (1 << (i - 1));
if (j + l > n)
break;
dp[i][j] = min(dp[i - 1][j], dp[i - 1][j + l]);
}
}
for (int i = 1; i <= m; i ++) {
int a, b;
cin >> a >> b;
cout << sol(a, b, dp) << '\n';
}
}