Cod sursa(job #2999258)

Utilizator TanasaStefanTanasa Stefan TanasaStefan Data 10 martie 2023 18:59:12
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.9 kb
#include <fstream>

using namespace std;

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

int v[100005] , a[1005][1005] , n , q , log;

int querry(int st , int dr)
{
    int lg = dr - st + 1;

    int k = 0;

    while((1 << k ) <= lg)
    {
        k++;
    }

    k--;

    return min(a[k][st] , a[k][dr - ( 1 << k) + 1]);
}
int main()
{
    f >> n >> q;

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

    log = 1;

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

    log--;

    for ( int i = 1  ; i <= log ; i++)
    {
        for ( int j = 1 ; j + (1 << (i - 1)) <= n ; j++)
        {
            a[i][j] = min(a[i - 1][j] , a[i - 1][j + ( 1 << ( i - 1))]);
        }
    }

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

        f >> x >> y;

        g << querry(x , y) << '\n';
    }

    return 0;
}