Cod sursa(job #2175963)

Utilizator Victor24Vasiesiu Victor Victor24 Data 16 martie 2018 20:10:13
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.74 kb
#include <bits/stdc++.h>
#define x first
#define y second
using namespace std;

int n, m, rmq[20][100005], lg[100005], a, b;

ifstream f ("rmq.in");
ofstream g ("rmq.out");


int main ()
{
    f>>n>>m;

    for ( int i = 1; i <= n ; i++ )
    {
        f>>rmq[0][i];
    }

    for ( int i = 2 ; i <= n; i++ )
    {
        lg[i] = lg[i/2] + 1;
    }

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

    for ( int i = 1 ; i <= m ; i++ )
    {
        f>>a>>b;

        g<<min( rmq[ lg[ b-a ] ][ a ] , rmq[ lg[ b-a ] ][ b - lg[ b-a ] ] )<<'\n';

    }

}