Cod sursa(job #2791525)

Utilizator casiannCasian casiann Data 30 octombrie 2021 16:59:41
Problema Range minimum query Scor 60
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <bits/stdc++.h>
using namespace std;

#define MAXN 100003
#define MAXLOGN 16

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

long int n, m, v[MAXN], M[MAXN][MAXLOGN];


int main(){
    fin >> n >> m;
    for(long int i=1 ; i<=n; i++){
        fin >> v[i];
        M[i][0] = v[i];
    }
    for(long int j=1; j<MAXLOGN; j++)
        for(long int i=1; i <= n- (1 << j) + 1; i++){
            M[i][j] = min(M[i][j-1], M[i+(1<<(j-1))][j-1]);
        }
    for(long int i=1; i<=m; i++){
        long int st, dr, lungime, minim, putere_maxima;
        fin >> st >> dr;
        lungime = dr - st + 1;
        putere_maxima = log2(lungime);
        minim = min(M[st][putere_maxima], M[dr-(1<<putere_maxima)+1][putere_maxima]);
        fout << minim << '\n';
    }
    return 0;
}