Cod sursa(job #2761543)

Utilizator Pop_MariaPop Maria Pop_Maria Data 2 iulie 2021 16:58:30
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <fstream>

using namespace std;

int numar_elemente, numar_intrebari;
int capat_stang, capat_drept;
int matrice[31][100001];

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

    fin >> numar_elemente;
    fin >> numar_intrebari;

    for(int i = 1; i <= numar_elemente; i++)
        fin >> matrice[0][i];

    int k = 1;

    for(int p = 2; p <= numar_elemente; p *= 2)
    {
        for(int j = 1; j <= numar_elemente; j++)
            if(matrice[k - 1][j + p/2] < matrice[k-1][j])
                matrice[k][j] = matrice[k-1][j + p/2];
            else
                matrice[k][j] = matrice[k-1][j];
        k++;
    }

    for(int i = 0; i < numar_intrebari; i++)
    {
        fin >> capat_stang >> capat_drept;

        int linie = 0, p = 1;

        while(p * 2 <= capat_drept - capat_stang + 1)
        {
            p *= 2;
            linie++;
        }

        if(matrice[linie][capat_stang] < matrice[linie][capat_drept - p + 1])
            fout << matrice[linie][capat_stang] << '\n';
        else
            fout << matrice[linie][capat_drept - p + 1] << '\n';

    }

    return 0;

}