Pagini recente » Cod sursa (job #1328098) | Cod sursa (job #2044389) | Cod sursa (job #785367) | Cod sursa (job #2856184) | Cod sursa (job #1306838)
#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, {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].push_back(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;
}