Cod sursa(job #3135674)

Utilizator dianam2003Manolache Diana Elena dianam2003 Data 4 iunie 2023 00:29:23
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");

int v[100001], m[100001][21];

int main() {
    int N, M;
    fin >> N >> M;

    for (int i = 0; i < N; i++)
        fin >> v[i];

    for (int i = 0; i < N; i++)
        m[i][0] = v[i];

    for (int j = 1; (1 << j) < N + 1; j++)
        for (int i = 0; i + (1 << j) < N + 1; i++)
        {
            int m1 = m[i][j - 1];
            int m2 = m[i + (1 << (j - 1))][j - 1];
            if(m1 < m2)m[i][j] = m1;
            else m[i][j] = m2;
        }


    for(int i = 1; i <= M; i++) {
        int a, b;
        fin >> a >> b;
        int logaritm = log2(a - b + 1);
        int m1 = m[a - 1][logaritm];
        int m2 = m[b - (1 << logaritm)][logaritm];
        if(m1 < m2)fout << m1 << endl;
        else fout << m2;
    }

    return 0;
}