Cod sursa(job #2868180)

Utilizator victor_gabrielVictor Tene victor_gabriel Data 10 martie 2022 19:33:44
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#define DIM 100001

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

int n, m;
int r[17][DIM], E[DIM];

int main()
{
    fin >> n >> m;
    for (int i = 1;i <= n; i++)
        fin >> r[0][i];

    for (int pow = 1; (1 << pow) <= n; pow++)
    {
        for (int i = 1; i <= n; i++)
        {
            r[pow][i] = r[pow - 1][i];
            int j = i + (1 << (pow - 1));
            if (j <= n && r[pow - 1][j] < r[pow][i])
                r[pow][i] = r[pow - 1][j];
        }
    }

    E[1] = 0;
    for (int i = 2; i <= n; i++)
        E[i] = 1 + E[i / 2];

    for (int i = 1; i <= m; i++)
    {
        int x, y;
        fin >> x >> y;

        int l = y - x + 1;
        int exp = E[l], pow = (1 << exp);
        int min = std::min(r[exp][x], r[exp][y - pow + 1]);

        fout << min << '\n';
    }

    return 0;
}