Cod sursa(job #2758246)

Utilizator LucaSimionovLuca Mihai Simionov LucaSimionov Data 9 iunie 2021 10:43:48
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;

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

int n,i,j,lg[1000000],d[100][1000010],a,q,x,y,m,s,k;

int main()
{

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

    lg [1] = 0;
    for( i = 2; i <= 100010; i ++ ) lg [i] = lg [i / 2] + 1;

    for( i = 1; i <= lg [n]; i ++ )
    {
        for( j = 1; j <= n - ( 1 << ( i ) ) + 1; j ++)
        {
            q = 1 << ( i - 1 );
            d [i][j] = min ( d [i-1][j], d [i-1][j+q] );
        }
    }

    for( i = 1; i <= m; i ++ )
    {
        f >> x >> y;
        k = lg [ y - x ];
        g << min ( d [k][x], d [k][y - ( 1 << k ) + 1]) << '\n';
    }

    return 0;
}