Cod sursa(job #2886740)

Utilizator Theodor17Pirnog Theodor Ioan Theodor17 Data 8 aprilie 2022 11:45:45
Problema Range minimum query Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream cin("rmq.in");
ofstream cout("rmq.out");

const int NMAX = 1e5;
int rmq[int(1 + log2(NMAX))][NMAX], v[NMAX], logaritm[NMAX], n, q, x, y;

int main(){

    cin >> n >> q;
    for(int i = 1; i <= n; i++)
        cin >> rmq[0][i];

    logaritm[1] = 0;
    for(int i = 2; i <= n; i++)
        logaritm[i] = 1 + logaritm[i / 2];

    int lim = log2(n);
    for(int i = 1; i <= lim; i++)
        for(int j = (1 << i); j <= n; j++)
            rmq[i][j] = min(rmq[i - 1][j - (1 << (i - 1))], rmq[i - 1][j]);

    for(int i = 0; i < q; i++){

        cin >> x >> y;
        int l = logaritm[y - x + 1];
        cout << min(rmq[l][x + (1 << l) - 1], rmq[l][y]) << "\n";

    }


    return 0;
}