Cod sursa(job #3183044)

Utilizator davidgeo123Georgescu David davidgeo123 Data 10 decembrie 2023 15:34:29
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include <iostream>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    int n, q;
    cin>>n>>q;
    int v[n+1];
    int rmq[25][n+1];///[bit][st]=>min(st...st+(1<<bit)-1)
    for(int i=1; i<=n; i++)
    {
        cin>>v[i];
        rmq[0][i]=v[i];
    }
    for(int i=1; i<=24; i++)
        for(int j=1; j+(1<<i)-1<=n; j++)
            rmq[i][j]=min(rmq[i-1][j], rmq[i-1][j+(1<<(i-1))]);
    int lg[n+1];
    lg[1]=0;
    for(int i=2; i<=n; i++)
        lg[i]=1+lg[i/2];
    for(int i=1; i<=q; i++)
    {
        int st, dr;
        cin>>st>>dr;
        int bit=lg[dr-st+1];
        int min1=rmq[bit][st];
        int min2=rmq[bit][dr-(1<<bit)+1];
        cout<<min(min1, min2)<<'\n';
    }
    return 0;
}