Cod sursa(job #2886460)

Utilizator Redstoneboss2Fabian Lucian Redstoneboss2 Data 7 aprilie 2022 19:42:31
Problema Range minimum query Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m;
int t[16][100000];

int putere(int baza, int exp);
void gentabel();
int MRQ(int l, int r);

int main(){

    fin >> n >> m;

    for(int i = 0, p; i < n; i++){

        fin >> t[0][i];
    }

    gentabel();

    for(int i = 0, l, r; i < m; i++){
        fin >> l >> r;
        fout << MRQ(l-1, r-1) << '\n';
    }

    return 0;
}

int putere(int baza, int exp){
    int p = 1;

    for(int i = 0; i < exp; i++){
        p *= baza;
    }

    return p;
}

void gentabel(){
    for(int i = 1, p; i < 17; i++){
        p = putere(2, i);

        for(int j = 0; j < n-p+1; j++){
            t[i][j] = min(t[i-1][j], t[i-1][j + putere(2, i-1)]);
        }
    }
}

int MRQ(int l, int r){
    int p = floor(log2(r-l+1)), k, mini;

    k = putere(2, p);
    mini = min(t[p][l], t[p][r-k+1]);

    return mini;
}