Cod sursa(job #3339916)

Utilizator m0rtalChiran Cosmin-Alexandru m0rtal Data 10 februarie 2026 21:13:44
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <bits/stdc++.h>

using namespace std;

const int NMAX = 100001;

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

int arr[NMAX], t[4 * NMAX];

int N, M;

void build_min(int v, int tl, int tr)
{
    if(tl == tr)
        t[v] = arr[tl];
    else
    {
        int tm = (tl + tr) / 2;
        build_min(v * 2, tl, tm);
        build_min(v * 2 + 1, tm + 1, tr);
        t[v] = min(t[v * 2], t[v * 2 + 1]);
    }
}

int query_min(int v, int tl, int tr, int l, int r)
{
    if(l > r)
        return 1e9;
    if(tl == l && tr == r)
        return t[v];
    int tm = (tl + tr) / 2;
    return min(query_min(v * 2, tl, tm, l, min(r, tm)), query_min(v * 2 + 1, tm + 1, tr, max(l, tm + 1), r));
}

int main()
{
    in >> N >> M;
    for(int i = 1; i <= N; i++)
        in >> arr[i];
    int x, y;
    build_min(1, 1, N);
    for(int i = 1; i <= M; i++)
    {
        in >> x >> y;
        out << query_min(1, 1, N, x, y) << "\n";
    }

    return 0;
}