Cod sursa(job #2336232)

Utilizator Andrei-27Arhire Andrei Andrei-27 Data 4 februarie 2019 21:58:04
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>
using namespace std ;
const int NR = 100002 ;
ifstream in ("rmq.in") ;
ofstream out ("rmq.out") ;
int rmq [ 18 ][ NR ] , lg [ NR ] , i , j , n , m , x , y ;
int main ()
{
    in >> n >> m ;
    for ( i = 1 ; i <= n ; ++ i )    in >> rmq [ 0 ][ i ] ;
    for ( i = 1 ; ( 1 << i ) <= n ; ++ i )
    for ( j = 1 ; j + ( 1 << i ) <= n + 1 ; ++ j )
    rmq [ i ][ j ] = min ( rmq [ i - 1 ][ j ] , rmq [ i - 1 ][ j + ( 1 << ( i - 1 ) ) ] ) ;
    for ( i = 2 ; i <= n ; ++ i )   lg [ i ] = lg [ i >> 1 ] + 1 ;
    for ( ; m -- ; )
    {
        in >> x >> y ;
        if ( x > y )    swap ( x , y ) ;
        out << min ( rmq [ lg [ y - x + 1 ] ][ x ] , rmq [ lg [ y - x + 1 ] ][ y - ( 1 << ( lg [ y - x + 1 ] ) ) + 1 ] ) << "\n" ;
    }
}