Cod sursa(job #2592932)

Utilizator tomitza.1604Sacuiu TomaAndrei tomitza.1604 Data 2 aprilie 2020 16:49:21
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
using namespace std;

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

const int NMAX = 100002;
const int LMAX = 18;
int v[NMAX], lg[NMAX], rmq[LMAX][NMAX];

int main()
{
    int N, M;
    in >> N >> M;
    in >> v[1];
    rmq[0][1] = v[1];
    for (int i = 2; i <= N; i++ ){
        in >> 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--){
        in >> x >> y;
        int dif = y - x + 1;
        int diff = lg[dif], r = y - ( 1 << diff ) + 1;
        out << min ( rmq[diff][x], rmq[diff][r] ) << '\n';
    }
    return 0;
}