Cod sursa(job #2928326)

Utilizator AleXutzZuDavid Alex Robert AleXutzZu Data 22 octombrie 2022 19:13:56
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>

#define MAX_SIZE 100000

int main() {
    std::ifstream input("rmq.in");
    std::ofstream output("rmq.out");

    int n, m, a[MAX_SIZE] = {0};

    input >> n >> m;

    for (int i = 0; i < n; ++i) input >> a[i];

    int sections[MAX_SIZE] = {0};

    int q = 1;

    for (int i = 0; i * i <= n; ++i) {
        sections[i] = a[i];
        for (int j = 1; j * j < n; ++j) sections[i] = std::min(sections[i], a[i + j]);
        q = i;
    }


    while (m--) {
        int x, y;
        input >> x >> y;
        x--, y--;

        int start = x / q;
        int finish = y / q;
        int min = INT32_MAX;
        for (int i = start + 1; i <= finish - 1; ++i) {
            min = std::min(min, a[sections[i]]);
        }

        for (int i = x; i < (start + 1) * q; ++i) {
            min = std::min(min, a[i]);
        }

        for (int i = finish * q; i <= y; ++i) {
            min = std::min(min, a[i]);
        }
        output << min << '\n';
    }

    return 0;
}