Cod sursa(job #3004217)

Utilizator pifaDumitru Andrei Denis pifa Data 16 martie 2023 10:39:54
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 in("rmq.in");
ofstream out("rmq.out");

int n, q;

const int N = 1e5 + 5;

int rmq[20][N], lg[N];
int main()
{
    in >> n >> q;
    for(int i = 1; i <= n; i++)
    {
        in >> rmq[0][i];
        if(i == 1)
            continue;
        lg[i] = lg[i / 2] + 1;
    }

    for(int e = 1; e <= lg[n] ; e++)
    {
        for(int i = (1 << e); i <= n; i++)
        {
            int p = (1 << (e - 1));
            rmq[e][i] = min(rmq[e - 1][i], rmq[e - 1][i - (1 << (e - 1))]);
        }
    }

    while(q--)
    {
        int st, dr;
        in >> st >> dr;
        int e = lg[dr - st + 1];
        out << min(rmq[e][st + (1 << e) - 1], rmq[e][dr]) << '\n';
    }
    return 0;
}