Cod sursa(job #3134182)

Utilizator Andrei20035Rusu Andrei Andrei20035 Data 28 mai 2023 17:59:23
Problema Range minimum query Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <iostream>

int n, m, v[100005], lung[100005], rmq[20][100005], x, y;

int main()
{
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    std::cin >> n >> m;
    for (int i = 1; i <= n; ++i)
    {
        std::cin >> v[i];
    }

    for (int i = 2; i <= n; ++i)
        lung[i] = lung[i >> 1] + 1;
    for (int i = 1; i <= n; ++i)
        rmq[0][i] = v[i];

    for (int i = 1; (1 << i) <= n; i++)
    {
        for (int j = 1, l; j <= n - (1 << i) + 1; j++)
        {
            l = 1 << (i - 1);
            rmq[i][j] = std::min(rmq[i - 1][j], rmq[i - 1][j + l]);
        }
    }

    for (int i = 1, d, l; i <= m; i++)
    {
        std::cin >> x >> y;

        d = y - x + 1;
        l = lung[d];
        std::cout << std::min(rmq[l][x], rmq[l][x + d - (1 << l)]) << "\n";
    }

    fclose(stdin);
    fclose(stdout);
    return 0;
}