Cod sursa(job #3348054)

Utilizator moloDaniMolodet Andrei Daniel moloDani Data 19 martie 2026 14:47:18
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <iostream>

using namespace std;

ifstream fin ("rmq.in");
ofstream fout ("rmq.out");

const int mxN = 1e5 + 1, mxJ = 20, oo = 1e5 + 1;

int rmq[mxN][mxJ], n, q;

void init(){
    long long ind = 1, aux = 2;
    while(aux <= n){
        for(int i = 1; i + aux - 1 <= n; i++)
            rmq[i][ind] = min(rmq[i][ind - 1], rmq[i + aux / 2][ind - 1]);
        ind++;
        aux = (1 << ind);
    }
}

int compute(int l, int r){
    int ans = rmq[l][0], aux = 0;
    while(r){
        if(r % 2){
            ans = min(ans, rmq[l][aux]);
            l += (1 << aux);
        }
        aux++;
        r /= 2;
    }

    return ans;
}

int main(){
    fin >> n >> q;
    for(int i = 1; i <= n; i++)
        fin >> rmq[i][0];
    init();

    for(int i = 1; i <= q; i++){
        int a, b;
        fin >> a >> b;
        fout << compute(a, b - a + 1) << "\n";
    }
}