Cod sursa(job #2382752)

Utilizator ezioconnorVlad - Gabriel Iftimescu ezioconnor Data 18 martie 2019 17:35:54
Problema Range minimum query Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, q, v[400001], start, finish, MIN, st, dr, poz, val;

inline void update(int nod, int st, int dr)
{
    if (st == dr)
    {
        v[nod] = val;
        return;
    }
    int mij = (st + dr) / 2;
    if (poz <= mij)
        update(2 * nod, st, mij);
    else
        update(2 * nod + 1, mij + 1, dr);
    v[nod] = min(v[2 * nod], v[2 * nod + 1]);
}

inline void RMQ(int nod, int st, int dr)
{
    if (start <= st && dr <= finish)
    {
        MIN = min(MIN, v[nod]);
        return;
    }
    int mij = (st + dr) / 2;
    if (start <= mij)
        RMQ(2 * nod, st, mij);
    if (mij < finish)
        RMQ(2 * nod + 1, mij + 1, dr);
}

int main()
{
    int a, b;
    in >> n >> q;
    for (int i = 1; i <= n; ++i)
    {
        in >> a;
        poz = i;
        val = a;
        update(1, 1, n);
    }
    for (int i = 1; i <= q; ++i)
    {
        in >> a >> b;
        MIN = INT_MAX;
        start = a;
        finish = b;
        RMQ(1, 1, n);
        out << MIN << '\n';
    }
    return 0;
}