Cod sursa(job #3286739)

Utilizator unomMirel Costel unom Data 14 martie 2025 16:39:39
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>
#include <cmath>

using namespace std;

ifstream in("rmq.in");
ofstream out("rmq.out");
int n, q, lg;
int v[100005];
int rmq[20][100005];

int query(int st, int dr)
{
    if(st > dr)
    {
        swap(st, dr);
    }

    int l = log2(dr - st + 1);

    return min(rmq[l][st], rmq[l][dr - (1 << l) + 1]);
}

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

    lg = log2(n);

    for(int i = 1; i<=n; i++)
    {
        rmq[0][i] = v[i];
    }

    for(int i = 1; i<=lg; 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))]);
        }
    }

    int st, dr;
    while(q--)
    {
        in>>st>>dr;

        out<<query(st, dr)<<'\n';
    }

    return 0;
}