Cod sursa(job #3277450)

Utilizator SergiuS3003Sergiu Stancu Nicolae SergiuS3003 Data 16 februarie 2025 11:25:27
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("rmq.in");
ofstream g ("rmq.out");
const int NMAX = 100001, BMAX = 17;
int rmq[NMAX][BMAX];///rmq[i][j] - minimul pe intervalul [i, i + (1<<j))
int log2[NMAX];
int main()
{
    int n, Q;
    f >> n >> Q;
    f >> rmq[1][0];
    for (int i = 2; i <= n; i++)
    {
        f >> rmq[i][0];
        log2[i] = log2[i / 2] + 1;
    }
    /// [ n - 2^bit, n)
    for (int bit = 1; bit <= log2[n]; bit++)
    {
        int rightBoundary = n - (1 << bit) + 1;
        for (int i = 1; i <= rightBoundary; i++)
        {
            rmq[i][bit] = min (rmq[i][bit - 1], rmq[i + (1 << (bit - 1))][bit - 1]);
        }
    }
    while (Q--)
    {
        int x, y;
        f >> x >> y;
        int lgInterval = y - x + 1;
        int bit = log2 [lgInterval];
        g << min (rmq[x][bit], rmq[y + 1 - (1 << bit)][bit]) << '\n';
    }
    return 0;
}