Cod sursa(job #2884482)

Utilizator hobbitczxdumnezEU hobbitczx Data 3 aprilie 2022 19:32:34
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
#define ll long long
#define INF 0x3F3F3F3F
using namespace std;

const string fisier = "rmq";

ifstream fin (fisier + ".in");
ofstream fout (fisier + ".out");

const int N_MAX = 1e5 + 5;

int n , q;
int m[N_MAX][19];

int solve (int l , int r){
    int lungime = r - l + 1 , k = 0;
    while (1 << (k + 1) <= lungime){
        k += 1;
    }
    return min(m[l][k] , m[r - (1 << k) + 1][k]);
}

int main(){
    ios_base::sync_with_stdio(false);
    fin >> n >> q;
    for (int i=1; i<=n; i++){
        int x; fin >> x;
        m[i][0] = x;
    }
    for (int j=1; j<18; j++){
        for (int i=1; i+(1<<j)-1<=n; i++){
            m[i][j] = min(m[i][j - 1] , m[i + (1 << (j - 1))][j - 1]);
        }
    }
    while (q--){
        int l , r; fin >> l >> r;
        fout << solve(l , r) << '\n';
    }
}