Cod sursa(job #2671673)

Utilizator Florinos123Gaina Florin Florinos123 Data 12 noiembrie 2020 15:50:15
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <fstream>
#include <cmath>

using namespace std;

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

int n, k;

int v[100005];

int b[1005];

const int inf = 2e9;

int main()
{
    f >> n >> k;
    for (int i=1; i<=n; i++)
        f >> v[i];

    int len = sqrt(n) + 1;

    for (int i=1; i<=n; i++)
    {
        if (i <= len) b[i] = inf;
        b[i / len] = min(b[i / len], v[i]);
    }

    for (; k; k--)
    {
        int l, r;
        int rez = inf;
        f >> l >> r;

        for (int i=l; i<=r; )
        {
            if (i % len == 0 && i + len - 1 <= r)
            {
                rez = min(rez, b[i / len]);
                i += len;
            }
            else
            {
                rez = min(rez, v[i]);
                i ++;
            }
        }

        g << rez << "\n";
    }

    return 0;
}