Cod sursa(job #2744268)

Utilizator Ionut10Floristean Ioan Ionut10 Data 24 aprilie 2021 11:00:17
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <bits/stdc++.h>
#define DimMax 100001
#define LogMax 20

using namespace std;

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

int n, q;
int x;
int a, b;
int Min[DimMax][LogMax];

int Minim( int a, int b )
{
    int lg = b - a + 1;
    int p = 0;
    while ( (1 << p) <= lg ) p++;
    p--;
    return min(Min[a][p], Min[b - (1 << p) + 1][p]);
}

int main()
{
    fin >> n >> q;
    for ( int i = 1; i <= n; i++ )
    {
        fin >> x;
        Min[i][0] = x;
    }
    for ( int lg = 1; (1 << lg) <= n; lg++ )
        for ( int i = 1; i + (1 << lg) - 1 <= n; i++ )
            Min[i][lg] = min(Min[i][lg - 1], Min[i + (1 << (lg - 1))][lg - 1]);

    //fout << Minim(2, 8);
    //cin >> q;
    for ( int i = 1; i <= q; i++ )
    {
        fin >> a >> b; //a++; b++;
        if ( a > b ) swap(a, b);
        fout << Minim(a, b) << '\n';
    }
    return 0;
}