Cod sursa(job #2586365)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 20 martie 2020 17:52:22
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ( "rmq.in" );
ofstream g ( "rmq.out" );
int v[100002], lg[100002], rmq[18][100002];
int main()
{
    int N, M;
    f >> N >> M;
    f >> v[1];
    rmq[0][1] = v[1];

    for ( int i = 2; i <= N; i++ )
    {
        f >> v[i];
        lg[i] = lg[i / 2] + 1;
        rmq[0][i] = v[i];
    }

    for ( int i = 1; ( 1 << i ) <= N; i++ )
    {
        int mx = N - ( 1 << i ) + 1 ;

        for ( int j = 1; j <= mx; j++ )
            rmq[i][j] = min ( rmq[i - 1][j], rmq[i - 1][j + ( 1 << ( i - 1 ) )] );
    }

    int x, y;

    while ( M-- )
    {
        f >> x >> y;
        int dif = y - x + 1;
        int diff = lg[dif], r = y - ( 1 << diff )+1;
        g << min ( rmq[diff][x], rmq[diff][r] ) << '\n';
    }

    return 0;
}