Cod sursa(job #2252967)

Utilizator ImbuzanRaduImbuzan Radu ImbuzanRadu Data 3 octombrie 2018 13:56:05
Problema Range minimum query Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.87 kb
#include <iostream>
#include <cmath>
#include <fstream>

using namespace std;

int matr[1001][1001], listaNumere[10000];
int n, m;

ifstream f("rmq.in");
ofstream g("rmq.out");

void Preporcess()
{
    for(int i = 0; i <=n; i++)
        matr[0][i] = listaNumere[i];

    for(int i = 1; i <= (int)log2(n); i++)
        for(int j = 0; j <= n - ((1<<i) - 1); j++)
            matr[i][j] = min(matr[i-1][j], matr[i - 1][j + (1<<(i-1))]);
}

int main()
{
    f>>n>>m;
    for(int i = 0; i < n ; i++)
    {
        f>>listaNumere[i];
    }

    Preporcess();
    for(int i = 0; i < m ; i++)
    {
        int st, dr;
        f>>st>>dr;
        if(st != 0)
            st--;
        dr--;
        int lungQuery = dr - st + 1;
        int l2 = (int)log2(lungQuery);
        g<<min(matr[l2][st], matr[l2][dr - (1<<(l2)) + 1])<<'\n';
    }
    return 0;
}