Cod sursa(job #3182969)

Utilizator Radu_MocanasuMocanasu Radu Radu_Mocanasu Data 10 decembrie 2023 12:59:31
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n;
int sp[100005][18];
void gen_sparse_table(){
    for(int j = 1; (1 << j) <= n; j++){
        for(int i = 1; i + (1 << j) - 1 <= n; i++)
            sp[i][j] = min(sp[i][j - 1], sp[i + (1 << (j - 1))][j - 1]);
    }
}
int range_minimum_query(int st, int dr){
    int lg2 = (int)log2(dr - st + 1);
    return min(sp[st][lg2], sp[dr - (1 << lg2) + 1][lg2]);
}
int main()
{
    int m,i,st,dr;
    fin >> n >> m;
    for(i = 1; i <= n; i++) fin >> sp[i][0];
    gen_sparse_table();
    for(i = 1; i <= m; i++){
        fin >> st >> dr;
        fout << range_minimum_query(st,dr) << "\n";
    }
    return 0;
}