Cod sursa(job #1650795)

Utilizator DysKodeTurturica Razvan DysKode Data 11 martie 2016 20:31:25
Problema Range minimum query Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <fstream>

using namespace std;

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

int rmq[20][100010],i,j,n,m,k,lg[100010],x,y;

int main()
{
    for( i = 2 ; i <= 100000 ; i++ )
        lg[ i ] = lg[ i / 2 ] + 1;
    fin>>n>>m;
    for( i = 1 ; i <= n ; i++ )
        fin>>rmq[ 0 ][ i ];
    for( j = 1 ; j <= lg[ n ] ; j++ )
        for( i = 1 ; i <= n ; i++ )
            rmq[ j ][ i ] = min( rmq[ j - 1 ][ i ] , rmq[ j - 1 ][ i + (1<<(j-1)) ] );

    for( i = 1 ; i <= m ; i++ )
    {
        fin>>x>>y;
        k = lg[ y - x ];
        fout<<min( rmq[ k ][ x ] , rmq[ k ][ y - (1<<(k-1)) ] )<<'\n';
    }

return 0;
}