Cod sursa(job #2176207)

Utilizator Victor24Vasiesiu Victor Victor24 Data 16 martie 2018 21:33:33
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 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[1][i];
    }

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

    int d = 2;

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

        d*=2;
    }

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

        int l = lg[b-a+1];

        int p = 1<<( l-1 );

        g<<min( rmq[ l ][ a ] , rmq[ l ][ b - p + 1 ] )<<'\n';

    }

}