Cod sursa(job #2771255)

Utilizator Tudor06MusatTudor Tudor06 Data 26 august 2021 12:46:38
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.93 kb
#include <iostream>
#include <fstream>

using namespace std;

const int NMAX = 1e5;
const int LOGMAX = 20;

int RMQ[LOGMAX][NMAX];
int log[NMAX + 1];

void calc_RMQ( int n ) {
    int i, j;
    for ( i = 1; ( 1 << i ) <= n; i ++ ) {
        for ( j = 0; j + ( 1 << i ) - 1 < n; j ++ ) {
            RMQ[i][j] = min( RMQ[i - 1][j], RMQ[i - 1][j + ( 1 << ( i - 1 ) )] );
        }
    }
    for ( i = 2; i <= n; i ++ ) {
        log[i] = log[i / 2] + 1;
    }
}
int query( int i, int j ) {
    int lg = log[j - i + 1];
    return min( RMQ[lg][i], RMQ[lg][j - ( 1 << lg ) + 1] );
}
int main() {
    ifstream fin( "rmq.in" );
    ofstream fout( "rmq.out" );

    int n, i, q, a, b;
    fin >> n >> q;
    for ( i = 0; i < n; i ++ ) {
        fin >> RMQ[0][i];
    }
    calc_RMQ( n );
    for ( i = 0; i < q; i ++ ) {
        fin >> a >> b;
        fout << query( a - 1, b - 1 ) << '\n';
    }
    return 0;
}