Cod sursa(job #3360561)

Utilizator JenJenCristache Ion JenJen Data 14 iulie 2026 15:59:00
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <bits/stdc++.h>
using namespace std;

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

#define MAX 100005
int n, q;
long long v[MAX];
long long rmq[MAX][20];
long long lg[MAX];

void calc()
{
    lg[1] = 0;
    for (int i = 2; i <= n; i++)
    {
        lg[i] = lg[i / 2] + 1;
    }

    for (int i = 1; i <= n; i++)
    {
        rmq[i][0] = v[i];
    }

    for (int j = 1; (1 << j) <= n; j++)
    {
        for (int i = 1; (i + (1 << j) - 1) <= n; i++)
        {
            rmq[i][j] = min(rmq[i][j - 1], rmq[i + (1 << (j - 1))][j - 1]);
        }
    }
}

long long query(int a, int b)
{
    int power = lg[b - a + 1];

    return min(rmq[a][power], rmq[b - (1 << power) + 1][power]);

}
int main()
{
    ios_base::sync_with_stdio(false);
    in.tie(NULL);

    in >> n >> q;
    for (int i = 1; i <= n; i++)
    {
        in >> v[i];
    }

    calc();

    while(q--)
    {
        int a, b;
        in >> a >> b;

        if (a > b) swap(a, b);
        out << query(a, b) << "\n";
    }
    return 0;
}