Cod sursa(job #3301612)

Utilizator Iustin_Mircea2010Iustin Mircea Iustin_Mircea2010 Data 28 iunie 2025 12:21:13
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <bits/stdc++.h>

using namespace std;

int rmq[100005][18];
int lg[100005];

int main(){
    
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");
    
    lg[1] = 0;
    for(int i = 2; i <= 100000; i++)
        lg[i] = lg[i / 2] + 1;
    int n, q;
    cin >> n >> q;
    for(int i = 1; i <= n; i++){
        cin >> rmq[i][0];
    }
    for(int b = 1; (1<<b) <= n; b++){
        for(int i = 1; i + (1<<b) - 1 <= n; i++){
            rmq[i][b] = min(rmq[i][b - 1], rmq[i + (1<<(b - 1))][b - 1]);
        }
    }
    while(q--){
        int a, b;
        cin >> a >> b;
        int l = lg[b - a + 1];
        cout << min(rmq[a][l], rmq[b - (1<<l) + 1][l]) << '\n';
    }
    
    return 0;
}