Cod sursa(job #3343759)

Utilizator robertcosacCosac Robert-Mihai robertcosac Data 28 februarie 2026 13:37:06
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.89 kb
#include <bits/stdc++.h>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int rmq[22][100009];
int lg[100009], p2[22];
int query (int x, int y)
{
    int l=y-x+1;
    l=lg[l];
    return min (rmq[l][x], rmq[l][y-p2[l]+1]);
}
signed main ()
{
    int n, q;
    f >> n >> q;
    lg[1]=0;
    int p=1;
    int curr=0;
    for (int i=2; i<=n; i++)
    {
        while (2*p<=i)
        {
            p*=2;
            curr++;
        }
        lg[i]=curr;
    }
    p2[0]=1;
    for (int i=1; i<=20; i++)
        p2[i]=2*p2[i-1];
    for (int i=1; i<=n; i++)
        f >> rmq[0][i];
    for (int i=1; p2[i]<=n; i++)
    {
        for (int j=1; p2[i]+j-1<=n; j++)
        {
            rmq[i][j]=min (rmq[i-1][j], rmq[i-1][j+p2[i-1]]);
        }
    }
    while (q--)
    {
        int x, y;
        f >> x >> y;
        g << query (x, y)<<'\n';
    }
}