Cod sursa(job #3352837)

Utilizator RaresPanuPanu Rares RaresPanu Data 2 mai 2026 09:55:31
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

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

int v[100001];
int rmq[17][100001];

int main() {
    int n,m;
    fin>>n>>m;
    for (int i=1;i<=n;i++) {
        fin>>v[i];
    }
    for (int i=1;i<=n;i++) {
        rmq[0][i]=v[i];
        //cout<<rmq[0][i]<<" ";
    }
    //cout<<"\n";
    for (int i=1;(1<<i)<=n;i++) {
        for (int j=1;j<=n-(1<<i)+1;j++) {
            rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);
            //cout<<rmq[i][j]<<" ";
        }
        //cout<<"\n";
    }
    for (int i=1;i<=m;i++) {
        int st,dr;
        fin>>st>>dr;
        int diff=dr-st+1;
        int bit=0,minim=1e9,poz=st;
        while ((1<<bit)<=diff) {
            if ((diff>>bit)&1) {
                minim=min(minim,rmq[bit][poz]);
                poz+=(1<<bit);
            }
            bit++;
        }
        fout<<minim<<"\n";
    }
    return 0;
}