Cod sursa(job #3310692)

Utilizator cosmin_90Drignei Cosmin-Cristian cosmin_90 Data 15 septembrie 2025 20:39:12
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
long long int n,m;
long long int mat[20][100001];
int hsb(long long int a){
    for(int i=63;i>=0;i--){
        if((a>>i)&&1){
            return i;
        }
    }
    return 0;
}
int main(){
    fin>>n>>m;
    for(int i=1;i<=n;i++){
        fin>>mat[0][i];
        //fout<<mat[0][i]<<" ";
    }
    //fout<<endl;
    for(int i=1;i<17;i++){
        for(int j=1;j<=n-(1<<i)+1;j++){
            long long int putere=1<<(i-1);
            mat[i][j]=min(mat[i-1][j],mat[i-1][j+putere]);
            //fout<<mat[i][j]<<" ";
        }
        //fout<<endl;
    }
    long long int l,r,logaritm,putere;
    for(int i=0;i<m;i++){
        fin>>l>>r;
        logaritm=hsb(r-l+1);
        putere=1<<logaritm;
        fout<<min(mat[logaritm][l],mat[logaritm][r-putere+1])<<endl;
    }
}