Cod sursa(job #3296597)

Utilizator 1tanasestefanTanase Stefan-Daniel 1tanasestefan Data 14 mai 2025 15:08:44
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <fstream>
#include <cmath>
#define NMAX 100005
using namespace std;

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

int n, m, v[NMAX], rmq[NMAX][17], x, y;


void buildRMQ(){
    for(int i=0; i<n; ++i)
        rmq[i][0] = v[i];
    
    for(int j=1; (1<<j)<=n; ++j){
        for(int i=0; i+(1<<j)<=n; ++i){
            rmq[i][j] = min(rmq[i][j-1], rmq[i+(1<<(j-1))][j-1]);
        }
    }
        
}

void query(int x, int y){
    int k = log2(y-x+1);
    fout<<min(rmq[x][k], rmq[y-(1<<k)+1][k])<<endl;
}

int main(){

    fin>>n>>m;
    for(int i=0; i<n; ++i)
        fin>>v[i];

    buildRMQ();

    while(m--){
        fin>>x>>y;
        query(x-1, y-1);
    }    

    return 0;
}