Cod sursa(job #3155856)

Utilizator Alle43221Moroz Alexandra-Ioana Alle43221 Data 9 octombrie 2023 21:56:32
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include "iostream"
#include "algorithm"

using namespace std;
int n, q;
int a[20][100001], e[100001], puteri[20];

int main(){
    cin>>n>>q;
    for(int i=1; i<=n; i++){
        cin>>a[0][i];
    }
    int aux=1, putere=0;
    for(int i=1; i<=n; i++){

        if(i>=aux*2) {
            aux *= 2;
            putere++;
        }e[i]=putere;
    }
    aux=1;
    for(int i=0; i<=putere; i++){
        puteri[i]=aux;
        aux*=2;
    }

    aux=2, putere=1;
    while(aux<=n){
        for(int i=1; i<=n; i++){
            if(i+aux/2<=n)
                a[putere][i]=min(a[putere-1][i], a[putere-1][i+aux/2]);
            else  a[putere][i]=a[putere-1][i];
        }
        aux*=2;
        putere++;
    }

    /*
    for(int i=1; i<=19; i++){
        for(int j=1; j<=n; j++){
            cout<<a[i][j]<<' ';
        }
        cout<<endl;
    }
    */

    /*
    for(int i=1; i<=n; i++){
        cout<<e[i]<<' ';
    }
     */
    int st, dr, L;
    for(int i=1; i<=q; i++){
        cin>>st>>dr;
        L=dr-st+1;
        cout<<min(a[e[L]][st], a[e[L]][dr-puteri[e[L]]+1])<<'\n';
    }

    return 0;
}