Cod sursa(job #2898175)

Utilizator Razvan_GabrielRazvan Gabriel Razvan_Gabriel Data 6 mai 2022 11:42:22
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>

using namespace std;

const int N = 1e5;
const int L = 16;

int r[L + 1][N + 1];
int log[L + 1];

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

    int n, m;
    fin >> n >> m;

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

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

    for(int i = 1; (1 << i) <= n; i++){
        for(int j = 1 << i; j <= n; j++){
            r[i][j] = min(r[i - 1][j - (1 << (i - 1))], r[i - 1][j]);
        }
    }

    for(int k = 0; k < m; k++){
        int st, dr;
        fin >> st >> dr;
        int l = log[dr - st + 1];
        fout << min(r[l][st + (1 << l) - 1], r[l][dr]) << "\n";
    }

    return 0;
}