Cod sursa(job #3132336)

Utilizator ingeauaIngeaua Alexandru ingeaua Data 22 mai 2023 12:33:20
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.5 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");


void buildRMQ(vector <int> v, int nrElemente, int RMQ[17][100001])
{

    cout << "intru in build rmq";
    for (int i = 0; i < nrElemente; i++)
    {
        RMQ[0][i] = v[i];               /// initializam prima linie a rmq ului cu valorile vectorului
    }

    for (int i = 1; i <= floor(log2(nrElemente)); i++)
    {
        for (int j = 0; j <nrElemente; j++)
        {
            RMQ[i][j] = min(RMQ[i-1][j], RMQ[i-1][j + int(pow(2,i))]);   /// aplicam formula generala pentru restul termenilor
        }
    }
}


int main()
{
    int nrElemente, nrIntrebari;
    fin >> nrElemente >> nrIntrebari;
    vector <int> v;
    for (int i = 0; i < nrElemente; i++)
    {
        int element;
        fin >> element;
        v.push_back(element);
    }

    int RMQ [17][100001]; // face urat si nu ma lasa sa aloc atat de mult spatiu pentru un vector so what should i do??

    buildRMQ(v, nrElemente, RMQ);

    for (int i = 1; i < nrElemente; i++)
    {
        int capatSt, capatDr;
        fin >> capatSt >> capatDr;
        int p = __builtin_clz(capatDr - capatSt + 1);
        cout << min(RMQ[p][capatSt], RMQ[p][capatDr - int(pow(2, p) + 1)]) << endl; // aplicam formula pentru a recupera minimul de pe
    }                                                                               // intervalul dorit

    return 0;
}