Cod sursa(job #2858178)

Utilizator DesertChuStefan Andrei DesertChu Data 27 februarie 2022 10:19:07
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f ("rmq.in");
ofstream g ("rmq.out");

int n, m, st, dr, dif, p, minm, p2;
int Min[100001][18];

int main()
{
    f >> n >> m;
    for (int i = 1; i <= n; ++i)
        f>> Min[i][1];
    for (int d = 1, j = 2; d <= n; d *= 2, ++j)
    {
        for (int i = 1; i + d - 1 <= n; ++i)
            Min[i][j] = min(Min[i][j - 1], Min[i + d][j - 1]);
    }
    for (int i = 1; i <= m; ++i)
    {
        f >> st >> dr;
        dif = dr - st + 1;
        p = 0;
        p2 = 1;
        while (dif)
        {
            dif /= 2;
            ++p;
            p2 *= 2;
        }
        p2 /= 2;
        minm = min(Min[st][p], Min[dr - p2 + 1][p]);
        g << minm << '\n';
    }
}