Pagini recente » Profil Ivo24k | Diferente pentru utilizator/darkthrone intre reviziile 1 si 3 | Diferente pentru utilizator/black_elf intre reviziile 3 si 2 | Cod sursa (job #3357859)
#include <fstream>
#include <cmath>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int A[100100];
int dp[100100][20];
int main() {
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++) {
cin >> A[i];
}
for (int i = 1; i <= n; i++) {
dp[i][0] = A[i];
}
for (int j = 1; (1 << j) <= n; j++) {
for (int i = 1; i + (1 << j) - 1 <= n; i++) {
dp[i][j] = min(dp[i][j-1], dp[i + (1 << (j-1))][j-1]);
}
}
for (int i = 1; i <= m; i++) {
int a, b;
cin >> a >> b;
int len = b - a + 1;
int l = (int)log2(len);
cout << min(dp[a][l], dp[b - (1 << l) + 1][l]) << '\n';
}
return 0;
}