Cod sursa(job #3134024)

Utilizator Adela_PetrePetre Adela Adela_Petre Data 27 mai 2023 21:51:13
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#include <iostream>
#include <math.h>
using namespace std;

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

int RMQ[17][100001];
int N, M, p, q, x, length;
int main(){
    in >> N >> M;
    for (int i = 0; i < N; i++){
        in >> p;
        RMQ[0][i + 1] = p; //punem valorile din vector pe prima linie
    }
    //construim rmq-ul:
    for (int i = 1; 1 << i <= N; i++){
        for (int j = 0; j + (1 << i) - 1 <= N; j++)
            RMQ[i][j] = min(RMQ[i - 1][j], RMQ[i - 1][j + (1 << (i - 1))]);
    }

    for (int i = 1; i <= M; i++) {//citim cele m intervale
        in >> p >> q;
        x = log2(q - p + 1);
        //gasim minimul:
        out << min(RMQ[x][q + 1 - (1 << x)], RMQ[x][p]) << '\n';
    }
    in.close();
    out.close();
    return 0;
}