Cod sursa(job #1746806)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 23 august 2016 22:33:48
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
# include <iostream>
# include <fstream>

# include <algorithm>
# include <cmath>

using namespace std;

# define MAX_N 100000
# define LOG_N 18

int rmq[LOG_N][MAX_N];

int main() {
    ifstream fin( "rmq.in" );
    ofstream fout( "rmq.out" );

    int n, m, i, j, a, b, l;

    fin >> n >> m;

    for ( i = 0; i < n; i ++ )
        fin >> rmq[0][i];

    # define s ( 1 << i )
    for ( i = 1; s <= n; i ++ )
        for ( j = 0; j <= n - s; j ++ )
            rmq[i][j] = min( rmq[i - 1][j], rmq[i - 1][j + s / 2] );

    for ( i = 0; i < m; i ++ ) {
        fin >> a >> b;
        a --;
        b --;

        l = log2( b - a + 1);
        fout << min( rmq[l][a], rmq[l][b - ( 1 << l ) + 1] ) << '\n';
    }

    fin.close();
    fout.close();

    return 0;
}