Pagini recente » Cod sursa (job #2381222) | Cod sursa (job #2351813) | Cod sursa (job #190609) | Cod sursa (job #2870182) | Cod sursa (job #1306832)
#include <cmath>
#include <algorithm>
#include <fstream>
#include <vector>
using namespace std;
inline
int query(const int a, const int b, const vector<vector<int>>& rmq) {
int p = floor(log2(b - a + 1));
return min( rmq[a][p],
rmq[b - (1 << p) + 1][p]);
}
int main() {
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, m;
fin >> n >> m;
// build DP RMQ table
vector<vector<int>> table(n+1, vector<int>(floor(log2(n)), 0));
for (int i = 1; i <= n; ++i)
fin >> table[i][0];
for (int i = n; 0 < i; --i)
for (int j = 1; i + (1 << j) - 1 <= n; ++j)
table[i][j] = min(table[i][j-1], table[i + (1 << (j - 1))][j-1]);
int a, b;
while (m--) {
fin >> a >> b;
fout << query(a, b, table) << '\n';
}
return 0;
}