Cod sursa(job #2902776)

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

using namespace std;

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

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

int main()
{

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

    for (i = 0; i < nrElem; ++i)
    {
        fin >> nums[i];
        rmq[0][i] = nums[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 < nrElem; i++)
    {
        for (j = 0; j < nrElem; j++)
            fout << rmq[i][j] << ' ';
        fout << '\n';
    }
*/
    for (auto i : rez)
        fout << i << '\n';
    return 0;
}