Cod sursa(job #3254421)

Utilizator Tudor.1234Holota Tudor Matei Tudor.1234 Data 7 noiembrie 2024 16:20:11
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include "bits/stdc++.h"
const int SIZE = 100000;
const int LOG = 20;
int rmq[SIZE + 5][LOG + 5], n, m;
void Build(){
    for(int k = 1; k <= LOG; k++){
        for(int i = 1; i + (1 << k) <= n + 1; i++){
            rmq[i][k] = std :: min(rmq[i][k - 1], rmq[i + (1 << (k - 1))][k - 1]);
        }
    }
}
int Query(int left, int right){
    int sz = (right - left + 1);
    int logg =  log2(sz);
    return std :: min(rmq[left][logg], rmq[right - (1 << logg) + 1][logg]);
}
void Solve(){
    std :: cin >> n >> m;
    for(int i = 1; i <= n; i++){
        std :: cin >> rmq[i][0];
    }
    Build();
    while(m -- ){
        int left, right;
        std :: cin >> left >> right;
        std :: cout << Query(left, right) << '\n';
    }
}
signed main(){
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    std :: ios_base :: sync_with_stdio(false);
    std :: cin.tie(0);
    std :: cout.tie(0);
    Solve();
    return 0;
}