Cod sursa(job #2543734)

Utilizator gheorghe_cristiGheorghe Florin Cristi gheorghe_cristi Data 11 februarie 2020 14:37:48
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n,m, st, dr, e;
int lg[100005];
int d[20][100005];

int main() {
    fin>>n>>m;

    for (int i=1;i<=n;++i)
        fin>>d[0][i];

    for (e = 1; (1<<e) <= n ; ++e)
        for (int i=1;i<=n;++i) {

            d[e][i] = d[e-1][i];

            if (i + (1<<(e-1)) <= n && d[e][i]>d[e-1][i + (1<<(e-1))])
                d[e][i] = d[e-1][i + (1<<(e-1))];
        }

    lg[1] = 0;

    for (int i=2;i<=n;++i)
        lg[i] = lg[i/2] + 1;

    for (int i=1;i<=m;++i) {
        fin>>st>>dr;
        e = lg[dr-st + 1];
        fout<<min(d[e][st], d[e][dr - (1<<e) + 1])<<"\n";
    }
}