Cod sursa(job #2305554)

Utilizator alexge50alexX AleX alexge50 Data 20 decembrie 2018 16:10:10
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <fstream>
#include <vector>

const int MAX_N = 100000;
const int LOG_MAX_N = 17;

int r[MAX_N][LOG_MAX_N];
int l[MAX_N + 1];

int main()
{
    std::ifstream fin("rmq.in");
    int n, k;

    fin >> n >> k;
    for(int i = 0; i < n; i++)
        fin >> r[i][0];

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

    for(int i = 0; i < n; i++)
        for(int j = 1; (1 << j) <= i + 1; j++)
            r[i][j] = std::min(r[i - (1 << (j - 1))][j - 1], r[i][j - 1]);

    std::ofstream fout("rmq.out");
    for(;k != 0; k--)
    {
        int x, y;
        fin >> x >> y;

        x --;
        y --;
        fout << std::min(r[x + (1 << l[y - x + 1]) - 1][l[y - x + 1]], r[y][l[y - x + 1]]) << "\n";
    }

    return 0;
}