Cod sursa(job #2626125)

Utilizator Gabriela_4Gabriela Ion Gabriela_4 Data 6 iunie 2020 12:02:08
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <fstream>

using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int n, m, vek[100000];
int rmq[100][1000];
int log[1000];

int main() {
    f >> n >> m;
    for (int i = 2; i <= n; i *= 2) log[i]++;
    for (int i = 1; i <= n; i++) log[i] += log[i - 1];
    for (int i = 1; i <= n; i++) {
        f >> vek[i];
        rmq[0][i] = vek[i];
    }
    for (int h = 1; (1 << h) <= n; ++h) {
        for (int i = 1; i <= n - (1 << h) + 1; ++i) {
            rmq[h][i] = min(rmq[h - 1][i], rmq[h - 1][i + (1 << (h - 1))]);
        }
    }
    for (int i = 1; i <= m; ++i) {
        int x, y;
        f >> x >> y;
        int h = log[y - x + 1];
        g << min(rmq[h][x], rmq[h][y - (1 << h) + 1]) << "\n";
    }
    return 0;
}