Cod sursa(job #3282992)

Utilizator KLNNNDanaila Calin KLNNN Data 7 martie 2025 19:32:41
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");

int n, m, a[20][1001], exp1[101];

int main(){
    
    fin >> n >> m;
    for(int i = 1; i <= n; i++){
        fin >> a[0][i];
    }

    for(int p = 1; (1 << p) <= n; p++){
        for(int i = 1; i <= n; i++){
            a[p][i] = a[p-1][i];
            int j = i + (1 << (p-1));
            if(j <= n && a[p][i] > a[p-1][j])
                a[p][i] = a[p-1][j];
        }
    }
    exp1[1] = 0;
    for(int i = 2; i <= n; i++){
        exp1[i] = 1 + exp1[i / 2];
    }

    for(int i = 1; i <= m; i++){
        int st, dr, e, L;
        fin >> st >> dr;
        e = exp1[dr - st + 1];
        L = (1 << e);
        fout << min(a[e][st], a[e][dr - L + 1]) << endl;
    }
}