Cod sursa(job #3122414)

Utilizator xDemonstyMatei Haba Ionut xDemonsty Data 18 aprilie 2023 22:24:46
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.07 kb
#include <fstream>

using namespace std;

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

long long dr = 16 ;
long long rmq [ 100001 ] [ 17 ];

long long v [ 200005 ] ;

long long log2(long long n )
{
  long long poz = 0 ;

  while ( (1 << ( poz + 1) ) <= n )
    poz ++;

  return poz ;
}
long long q;
int main()
{
    long long n , m  ;
    cin >> n >> q ;

    for ( int i = 1; i <= n ; i ++ )
    {
        cin >> v[ i ] ;

    }

    for ( int i = 1; i <= n ; i ++ )
    {
        rmq [ i ] [ 0 ] = v[ i ] ;
    }

    long long x = log2(n);
    for ( int j = 1; j <= 16 ; j ++ )
    {
        for ( int i = 1; i + (1 << j ) - 1 <= n ; i ++ )
        {
            rmq [ i ] [ j ] = min ( rmq [ i ] [ j - 1 ] , rmq [ i + (1<<(j-1)) ] [ j - 1 ] );
        }
    }


    for ( int i = 1; i <= q ; i ++ )
    {

        long long a , b ;
        cin >> a >> b;

        long long d = b - a + 1  ;
        long long y = log2(d);

        cout <<  min ( rmq [ a ] [ y ] , rmq [ b - (1<<y) + 1 ] [ y ]) << '\n';
    }

    return 0;
}