Cod sursa(job #2869584)

Utilizator marcpopPop Marc Alexandru marcpop Data 11 martie 2022 17:46:34
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

int rmq[35][100001], v[100001], log2[32];

int n, m, a, b;

int main()
{

    fin>>n>>m;

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

        fin>>v[i];

    }

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

        rmq[0][i] = v[i];

    }

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

            rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+(1 << (i-1))]);

        }
    }

    log2[1]=0;

    for (int i=2; i<=n; i++) {
        log2[i] = log2[i/2] + 1;
    }

    for (int i=1; i<=m; i++) {

        fin>>a>>b;

        int len = b - a + 1;
        int l = log2[len];

        int crmq = min(rmq[l][a], rmq[l][b-(1 << l)+1]);

        fout<<crmq<<"\n";

    }

    return 0;
}