Cod sursa(job #3155016)

Utilizator Luka77Anastase Luca George Luka77 Data 7 octombrie 2023 08:18:12
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
using namespace std;

/// INPUT / OUTPUT
const string problem = "rmq";
ifstream fin(problem + ".in");
ofstream fout(problem + ".out");

const int NMAX = 1e5 + 5, LOG = 20;
int N, Q;
int arr[NMAX], rmq[LOG][NMAX];

inline void RMQ(int N)
{
    for(int j = 1; j <= N; ++ j)
        rmq[0][j] = arr[j];

    for(int i = 1; (1 << i) <= N; ++ i)
    {
        for(int j = 1; j <= N; ++ j)
        {
            rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
        }
    }
}

int main()
{
    ios::sync_with_stdio(false);
    fin.tie(NULL);
    fout.tie(NULL);

    fin >> N >> Q;

    for(int i = 1; i <= N; ++ i)
        fin >> arr[i];

    RMQ(N);

    while(Q--)
    {
        int a, b;
        fin >> a >> b;
        int k = log2(b - a + 1);
        fout << min(rmq[k][a], rmq[k][b - (1 << k) + 1]) << '\n';
    }

    return 0;
}