Cod sursa(job #2766343)

Utilizator BalasaRaduBalasa Radu BalasaRadu Data 31 iulie 2021 19:12:53
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
using namespace std;

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

const int dim=100009;

int n,m,v[dim],rmq[20][dim];

void generare(){
    for(int i=1;i<=n;i++)
        rmq[0][i]=v[i];

    int ct=1;
    for(int put=2;put<=n;put*=2){
        for(int i=1;i+put-1<=n;i++)
            rmq[ct][i]=min(rmq[ct-1][i],rmq[ct-1][i+put/2]);
        ct++;
    }
}

void putere(int x,int& put,int& exp){
    put=1,exp=0;
    while(put*2<=x){
        put*=2;
        exp++;
    }
}

signed main(){
        fin>>n>>m;
    for(int i=1;i<=n;i++){
        fin>>v[i];
    }
    generare();
    for(int i=1;i<=m;i++){
        int st,dr;
        fin>>st>>dr;
        int put,exp;
        putere(dr-st+1,put,exp);
        fout<<min(rmq[exp][st],rmq[exp][dr-put+1])<<'\n';
    }
}