Cod sursa(job #3280523)

Utilizator Seba1030Banescu Stefan Sebastian Seba1030 Data 26 februarie 2025 17:04:13
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <fstream>

using namespace std;

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

int rmq[17][100005], v[100005], logi[100005];

int main() {
    
    for ( int i = 2; i < 100005; i++ ) {
        logi[i] = logi[i / 2] + 1;
    }
    int n;
    int m;
    cin >> n;
    cin >> m;
    for ( int i = 1; i <= n; i++ ) {
        cin >> v[i];
    }
    for ( int i = 1; i <= n; i++ ) {
        rmq[0][i] = v[i];
    }
    for ( int lgcurr = 1; lgcurr <= logi[n]; lgcurr++ ) {
        for ( int i = 1; i + (1 << lgcurr) - 1 <= n; i++ ) {
            rmq[lgcurr][i] = min( rmq[lgcurr - 1][i], rmq[lgcurr - 1][i + ( 1 << ( lgcurr - 1 ) )] );
        }
    }
    for ( int i = 1; i <= m; i++ ) {
        int start, finish;
        cin >> start >> finish;
        int lg = logi[finish - start + 1];
        cout << min ( rmq[lg][start], rmq[lg][finish - ( 1 << lg ) + 1] ) << '\n';
    }
    return 0;
}