Cod sursa(job #2893346)

Utilizator Theodor17Pirnog Theodor Ioan Theodor17 Data 25 aprilie 2022 19:59:32
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>

using namespace std;

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

const int NMAX = 1e5;
int rmq[21][NMAX + 1], logaritm2[NMAX + 1], n, q, x, y;

int main(){

    cin >> n >> q;
    logaritm2[1] = 0;

    for(int i = 1; i <= n; i++){

        cin >> rmq[0][i];

        if(i != 1)
            logaritm2[i] = 1 + logaritm2[(i >> 1)];

    }

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

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

        cin >> x >> y;
        l = logaritm2[y - x + 1];

        cout << min(rmq[l][x + (1 << l) - 1], rmq[l][y]) << "\n";

    }


}