Cod sursa(job #3245347)

Utilizator andrei_nAndrei Nicolae andrei_n Data 28 septembrie 2024 16:56:42
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin ("rmq.in");
ofstream fout ("rmq.out");

const int N = 1e5 + 5;

int rmq[20][N], lg2[N], v[N];
int n, q;

int main()
{
    fin >> n >> q;
    for (int i = 1; i <= n; i++)
        fin >> v[i];

    lg2[1] = 0;
    for (int i = 2; i < N; i++)
        lg2[i] = lg2[i / 2] + 1;

    for (int i = 1; i <= n; i++)
        rmq[0][i] = v[i];
    for (int i = 1; i < 20; i++)
        for (int j = 1; j <= n - (1 << (i - 1)); j++)
            rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);

    for (int i = 1; i <= q; i++)
    {
        int l, r;
        fin >> l >> r;
        fout << min(rmq[lg2[r - l]][l], rmq[lg2[r - l]][r - (1 << (lg2[r - l])) + 1]) << '\n';
    }
}