Cod sursa(job #2092026)

Utilizator VladGhetinaVlad Ghetina VladGhetina Data 20 decembrie 2017 20:17:23
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <cstdio>
#include <cmath>
#include <algorithm>

using namespace std;

#define IN "rmq.in"
#define OUT "rmq.out"
#define lg 100003

int n , m;
int rmq[17][lg] , loga[lg];

void Read()
{
    int i;

    scanf ( "%d%d" , &n , &m );
    for ( i = 1 ; i <= n ; i ++ )
        scanf ( "%d" , &rmq[0][i]) , loga[i+1] = loga[i/2+1]+1;
    loga[1] = 0;
}

void RMQ()
{

    int i , j , t;

    t = loga[n];
    for ( i = 1 ; i <= t ; i ++ )
        for ( j = 1 ; j+(1<<(i-1)) < n ; j ++ )
            rmq[i][j] = min(rmq[i-1][j],rmq[i-1][j+(1<<(i-1))]);

}

void Solve()
{
    int i , x , y , d;

    for ( i = 1 ; i <= m ; i ++ ){
        scanf ( "%d%d" , &x , &y );
     d = loga[(y-x+1)];
     printf ( "%d\n" , min(rmq[d][x],rmq[d][y-(1<<d)+1]));
    }
}

int main()
{
   freopen( IN , "r" , stdin );
   freopen( OUT , "w" , stdout );

   Read();
   RMQ();
   Solve();
}