Cod sursa(job #3004529)

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

const int N = 1e5 + 5;

int n, q;

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)
            lg[i] = lg[i / 2] + 1;
    }
    for(int e = 1; (1 << e) <= n; e++)
    {
        for(int i = 1; i + (1 << e) - 1 <= n; i++)
        {
            int p  = (1 << (e - 1));
            rmq[e][i] = min(rmq[e - 1][i], rmq[e - 1][i + p]);
        }
    }
    while(q--)
    {
        int st, dr;
        in >> st >> dr;
        int len = dr - st + 1, e = lg[len];
        out << min(rmq[e][st], rmq[e][dr - (1 << e) + 1]) << '\n';
    }
    return 0;
}