Cod sursa(job #3132544)

Utilizator Alexandra789Alexandra Uceanu Alexandra789 Data 23 mai 2023 00:30:29
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>

int v[100001][17];

int main(){
    std::ifstream f("rmq.in");
    std::ofstream g("rmq.out");

    int n, m;
    f >> n >> m;

    for(int i = 1; i <= n; i++)
        f >> v[i][0];
       
    for(int p = 1; p < 17; p++)
        for(int i = 1; i + (1 << p) - 1 <= n; i++)
            v[i][p] = std::min(v[i][p - 1], v[i + (1 << (p - 1))][p - 1]);

    for(int i = 0; i < m; i++){
        int x, y;
        f >> x >> y;

        int lungime = y - x + 1;

        if(lungime == 1)
            g << v[x][0] << ' ';
        else{
            int p = 0;

            while(lungime > (1 << p))
                ++p;

            int mini = std::min(v[x][p - 1], v[y - (1 << (p - 1)) + 1][p - 1]);
            g << mini <<  '\n';
        }
    }
    return 0;
}