Cod sursa(job #2834181)

Utilizator raresgherasaRares Gherasa raresgherasa Data 16 ianuarie 2022 16:50:34
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
const int N_MAX = 100005 , LOG = 17;
int m[N_MAX][LOG] , q , n , l , r , x;
int solve (int l , int r)
{
    int lungime = r - l + 1 , k = 0;
    while (1 << (k + 1) <= lungime) k = k + 1;
    return min(m[l][k] , m[r - (1 << k) + 1][k]);
}
int main()
{
    fin >> n >> q;
    for (int i=1; i<=n; i++)
    {
        fin >> x;
        m[i][0] = x;
    }
    for (int j=1; j<LOG; j++)
    {
        for (int i=1; i + (1 << j) - 1 <=n; i++) m[i][j] = min(m[i][j - 1] , m[i + (1 << (j - 1))][j - 1]);
    }
    while (q--)
    {
        fin >> l >> r;
        fout << solve(l , r) << '\n';
    }
}