Cod sursa(job #1396924)

Utilizator DysKodeTurturica Razvan DysKode Data 23 martie 2015 09:46:01
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <iostream>

using namespace std;

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

#define DIM 100040
#define logDIM

int Vec[20][DIM],i,j,Lg[DIM],n,m,k,ans,r,l;

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

    for(i=2 ; i<=n ; ++i)
        Lg[ i ] = Lg[ i / 2 ] + 1;

    for(i=1 ; i<=n ; ++i)
        in>>Vec[ 0 ][ i ];

    for(i=1 ; i<=Lg[ n ] ; ++i)
        for(j=1 ; j<=n ; ++j)
            Vec[ i ][ j ] = min( Vec[ i - 1 ][ j ] , Vec[ i - 1 ][ j + (1 << (i-1)) ] );

    //for(i=0 ; i<=Lg[n] ; ++i,cout<<'\n')
        //for(j=1 ; j<=n ; ++j)
            //out<<Vec[i][j]<<' ';

    for(i=1 ; i<=m ; ++i)
    {
        in>>l>>r;
        k = Lg[ r - l ];
        if( l == r - 1 )
        {
            out<<min( Vec[0][l] , Vec[0][r] )<<'\n';
            continue;
        }
        ans = min( Vec[ k ][ l ] , Vec[ k ][ l + k ] );
        //cout<<l<<' '<<r<<' '<<k<<' '<<l<<' '<<l+k<<ans<<'\n';
        out<<ans<<'\n';
    }

return 0;
}