Cod sursa(job #2870650)

Utilizator LukyenDracea Lucian Lukyen Data 12 martie 2022 14:46:34
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;
const int s_vec = 100001;

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

int tabel[18][s_vec], nr_elem, nr_query;

void gen_sparse();
int query_ans(int l, int r);

int main()
{
    fin >> nr_elem >> nr_query;
    for (int i = 1; i <= nr_elem; i++)
        fin >> tabel[0][i];
    gen_sparse();
    for (int i = 1; i <= nr_query; i++)
    {
        int l, r;
        fin >> l >> r;
        fout << query_ans(l, r) << "\n";
    }

    return 0;
}

void gen_sparse()
{
    for (int put = 1; (1 << put) <= nr_elem; put++)
        for (int i = 1; (1 << put) + i - 1 <= nr_elem; i++)
            tabel[put][i] = min(tabel[put-1][i], tabel[put-1][i + (1 << put - 1)]);
return;
}

int query_ans(int l, int r)
{
    int len = r - l + 1;
    int put = log2(len);
    int dif = len - (1 << put);
    return min(tabel[put][l], tabel[put][l + dif]);
}