Cod sursa(job #3160956)

Utilizator Robert_NicuNicu Robert Cristian Robert_Nicu Data 25 octombrie 2023 12:16:16
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>
#define log x
#define DIM 100001
using namespace std;

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

int n, m, len, nextj, st, dr;
int rmq[20][DIM], log[DIM];
int i, j;

int main(){
    fin>>n>>m;
    for(i=1; i<=n; i++)
        fin>>rmq[0][i];
    for(i=1; (1<<i)<=n; i++){
        for(j=1; j<=n; j++){
            rmq[i][j]=rmq[i-1][j];
            nextj=j+(1<<i);
            if(nextj<=n && rmq[i][j]>rmq[i-1][nextj])
                rmq[i][j]=rmq[i-1][nextj];
        }
    }

    log[1]=0;
    for(i=2; i<=n; i++)
        log[i]=log[i/2]+1;

    while(m--){
        fin>>st>>dr;
        len=dr-st+1;
        fout<<min(rmq[log[len]][st], rmq[log[len]][dr-len+1])<<"\n";
    }
}