Cod sursa(job #3276346)

Utilizator slol003Rizea Alexandru-Gabriel slol003 Data 13 februarie 2025 13:59:10
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <bits/stdc++.h>

using namespace std;
const int NMAX = 1e5 + 5;
int rmq[NMAX][20];
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define cin fin
#define cout fout
int query(int l, int r)
{
    int d = (int)log2(r - l + 1);
    if (rmq[l][d] <= rmq[r - (1 << d) + 1][d])
    {
        return rmq[l][d];
    }
    else
    {
        return rmq[r - (1 << d) + 1][d];
    }
}
int main()
{
    int n; cin >> n;
    for (int i = 0; i < n; ++ i)
    {
        cin >> rmq[i][0];
    }
    for (int j = 1; (1 << j) <= n; ++ j)
    {
        for (int i = 0; (i + (1 << j) - 1) < n; ++ i)
        {
            if (rmq[i][j - 1] < rmq[i + (1 << (j - 1))][j - 1])
            {
                rmq[i][j] = rmq[i][j - 1];
            }
            else
            {
                rmq[i][j] = rmq[i + (1 << (j - 1))][j - 1];
            }
        }
    }
    int q; cin >> q;
    for (int i = 1, a, b; i <= q; ++ i)
    {
        cin >> a >> b;
        cout << query(a, b) << '\n';
    }

    return 0;
}