Cod sursa(job #3134262)

Utilizator darius1843Darius Suditu darius1843 Data 28 mai 2023 20:22:06
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
using namespace std;
int v[1000001][20];
int main()
{
    ifstream in("rmq.in");
    ofstream out("rmq.out");
    int n, m, x1 = 2, x2 = 1, x3, x4, x5;
    in >> n >> m;
    for (int i = 1; i <= n; i++)
        in >> v[i][0];

    while (x1 <= n) {
        for (int i = 1; i <= n; i++)
            v[i][x2] = min(v[i][x2 - 1], v[i + x1 / 2][x2 - 1]);
        x2++;
        x1 *= 2;
    }

    for (int i = 1; i <= m; i++) {
        in >> x3 >> x4;
        x1 = 1;
        x5 = 0;
        if (x1 * 2 <= x4 - x3 + 1) {
            do {
                x1 = x1 * 2;
                x5++;
            } while (x1 * 2 <= x4 - x3 + 1);
        }
        out << min(v[x3][x5], v[x4 - x1 + 1][x5]) << "\n";
    }
    return 0;
}