Cod sursa(job #2575214)

Utilizator CosminMorarMorar Cosmin Andrei CosminMorar Data 6 martie 2020 12:08:17
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n, q, lInt, nrInt;
int v[100001], interv[330];

int main() {
    fin >> n >> q;
    lInt = sqrt(n);
    nrInt = n / lInt + (bool)(n % lInt);

    for (int i = 1; i <= n; i++)
        fin >> v[i];

    for (int j = 1; j <= nrInt; j++) {
        interv[j] = 2000000000;
        for (int h = lInt * (j - 1) + 1; h <= lInt * j; h++)
            interv[j] = min(interv[j], v[h]);
    }

    while (q--) {
        int a, b, minim = 2000000000;

        fin >> a >> b;

        int j = 1;
        while (lInt * j < a)
            j++;

        for (int h = a; h <= lInt * j && h <= b; h++)
            minim = min(minim, v[h]);

        j++;
        for (; lInt * j <= b; j++)
            minim = min(minim, interv[j]);

        j--;
        for (int h = j * lInt + 1; h <= b; h++)
            minim = min(minim, v[h]);

        fout << minim << '\n';
    }
    return 0;
}