Cod sursa(job #2574207)

Utilizator vmnechitaNechita Vlad-Mihai vmnechita Data 5 martie 2020 20:56:17
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>
#define NMAX 100005

using namespace std;

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

vector < int > a[18];
int v[NMAX];

int main()
{
    int n, q, i, j, x, y, z, lg;

    fin >> n >> q;
    for ( i = 1 ; i <= n ; i++ ) fin >> v[i], a[0].push_back ( v[i] );

    x = log2 ( n );
    for ( i = 1 ; i <= x ; i++ )
        for ( j = 0 ; j <= n - ( 1 << i ) ; j++ )
            a[i].push_back ( min ( a[i-1][j], a[i-1][j+(1<<(i-1))] ) );

    while ( q-- )
    {
        fin >> x >> y;
        x--, y--;
        lg = ( y - x + 1 );
        z = log2 ( lg );
        int X = a[z][x];
        int Y = a[z][y-(1<<z)+1];
        fout << min ( a[z][x], a[z][y-(1<<z)+1] ) << '\n';
    }

    return 0;
}