Cod sursa(job #2358834)

Utilizator catalintermureTermure Catalin catalintermure Data 28 februarie 2019 13:20:04
Problema Range minimum query Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <fstream>

using namespace std;

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

int mat[100000][18];

int lg2(int x) {
    int rez = 0;
    while(x > 1) {
        x >>= 1;
        rez++;
    }
    return rez;
}

int main() {
    int n, m;
    inf >> n >> m;
    for(int i = 1; i <= n; i++) {
        inf >> mat[i][0];
    }
    int lim;
    for(int j = 1; (1 << j) <= n; j++) {
        lim = n - (1 << j) + 1;
        for(int i = 1; i <= lim; i++) {
            mat[i][j] = min(mat[i][j - 1], mat[i + (1 << (j - 1))][j - 1]);
        }
    }
    int x, y, k;
    for(int i = 0; i < m; i++) {
        inf >> x >> y;
        k = lg2(y - x);
        outf << min(mat[x][k], mat[y - (1 << k) + 1][k]) << '\n';
    }
    return 0;
}