Cod sursa(job #2870684)

Utilizator toma_ariciuAriciu Toma toma_ariciu Data 12 martie 2022 15:03:29
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <fstream>

using namespace std;

const string filename = "rmq";
ifstream fin(filename + ".in");
ofstream fout(filename + ".out");

int n, q;
int log2[100005], rmq[20][100005];

int main()
{
    fin >> n >> q;
    for(int i = 1; i <= n; i++)
        fin >> rmq[0][i];
    for(int i = 2; i <= n; i++)
        log2[i] = log2[i / 2] + 1;
    for(int j = 1; (1 << j) <= n; j++)
        for(int i = 1; i + (1 << (j - 1)) <= n; i++)
            rmq[j][i] = min(rmq[j - 1][i], rmq[j - 1][i + (1 << (j - 1))]);
    for(int i = 1; i <= q; i++)
    {
        int x, y, len, log, ans;
        fin >> x >> y;
        len = x - y + 1;
        log = log2[len];
        ans = min(rmq[log][x], rmq[log][y - (1 << log) + 1]);
        fout << ans << '\n';
    }
    return 0;
}