Cod sursa(job #2902804)

Utilizator Tudose_StefanTudose Alexandru Stefan Tudose_Stefan Data 16 mai 2022 20:36:50
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>

using namespace std;

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

long long nrElem, nrQuery, i, j, stopJ, rmq[19][100000], st, dr, putere;
vector <int> rez;

int main()
{

    fin >> nrElem >> nrQuery;
    rez.assign(nrQuery, 0);

    for (i = 0; i < nrElem; ++i)
        fin >> rmq[0][i];

    stopJ = floor(log2(nrElem))+1;
    for (i = 1; i < stopJ; i++)
        for (j = 0; j + (1 << i) <= nrElem; j++)
        {
            rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j+(1 << (i-1))]);
        }
    for (i = 0; i < nrQuery; i++)
    {
        fin >> st >> dr;
        --st; --dr;
        putere = floor(log2((dr-st+1)));
        rez[i] = min(rmq[putere][st], rmq[putere][dr - (1 << putere)+1]);
    }

/*
    for (i = 0; i < 18; i++)
    {
        for (j = 0; j < nrElem; j++)
            fout << rmq[i][j] << ' ';
        fout << "\n linie noua \n";
    }
/*/

    for (auto i : rez)
        fout << i << '\n';
    return 0;
}