Cod sursa(job #3337674)

Utilizator David_RadavoiRadavoi David Alexandru David_Radavoi Data 29 ianuarie 2026 14:12:13
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <iostream>
#include <fstream>

using namespace std;

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

#define LOG 17
#define NMAX 100000

int v[NMAX + 1];
int rmq[LOG + 1][NMAX + 1];
int log[NMAX + 1];

int main()
{
    int N, M;
    fin >> N >> M;
    for (int i = 1; i <= N; i++){
        fin >> v[i];
        rmq[0][i] = v[i];
    }
    log[0] = log[1] = 0;
    for (int i = 2; i <= NMAX; i++){
        log[i] = 1 + log[i / 2];
    }
    for (int p = 1; p <= LOG; p++){
        for (int i = 1; i + (1 << p) - 1 <= N; i++){
            rmq[p][i] = min(rmq[p - 1][i], rmq[p - 1][i + (1 << (p - 1))]);
        }
    }
    for (int i = 1; i <= M; i++){
        int x, y;
        fin >> x >> y;
        int logar = log[y - x + 1];
        fout << min(rmq[logar][x], rmq[logar][y - (1 << logar) + 1]) << '\n';
    }
    return 0;
}