Pagini recente » Cod sursa (job #3175796) | Cod sursa (job #489509) | Cod sursa (job #546425) | Cod sursa (job #893275) | Cod sursa (job #1612118)
#include <fstream>
#include <vector>
#include <array>
#include <cmath>
using namespace std;
constexpr int maxniv = 18;
class rmq{
int n;
vector<array<int, maxniv>> buf;
public:
rmq(const vector<int>& v): n(v.size()), buf(n){
for(int i = 0; i < n; ++i){
buf[i][0] = v[i]; }
for(int niv = 1, step = 1; niv < maxniv; ++niv, step *= 2){
for(int i = 0, j = step; j < n; ++i, ++j){
buf[i][niv] = min(buf[i][niv-1], buf[j][niv-1]); } } }
int query(const int st, const int dr){
const int niv = log2(dr-st+1), step = 1<<niv;
return min(buf[st][niv], buf[dr-step+1][niv]); } };
int main(){
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m;
f >> n >> m;
vector<int> v(n);
for(int i = 0; i < n; ++i){
f >> v[i]; }
rmq r(v);
for(int i = 0, a, b; i < m; ++i){
f >> a >> b;
g << r.query(a-1, b-1) << '\n'; }
return 0; }