Cod sursa(job #3353661)

Utilizator AlexOprescu21Oprescu Alexandru AlexOprescu21 Data 9 mai 2026 12:02:36
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <cmath>
#include <fstream>

using namespace std;

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

int const NMAX = 1e5 + 1;
int const LOG = 18;
int rmq[NMAX][LOG];

void preprocesare(int i, int j){
    rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1<<(j-1))][j - 1]);
}

int interogare(int a, int b){
    int lung = b - a + 1;
    int l = log2(lung);
    return min(rmq[a][l], rmq[b - (1<<l) + 1][l]);
}

int main(){
    int n, m;
    fin>>n>>m;
    int l = log2(n);
    for(int i = 0; i<n; i++){
        int x;
        fin>>x;
        rmq[i][0] = x;
    }
    for(int j = 1; (1<<j)<=n; j++){
        for(int i = 0; i + (1<<j) - 1 < n; i++){
            preprocesare(i, j);
        }
    }
    for(int i = 0; i<m; i++){
        int a,b;
        fin>>a>>b;
        fout<<interogare(a - 1, b - 1)<<"\n";
    }
}