Cod sursa(job #3203534)

Utilizator iordachellMatei Iordache iordachell Data 13 februarie 2024 20:47:39
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>
using namespace std;
int v[100005],lg[100005],lookup[16][100005];
void precalc(int n)
{
    lg[1]=0;
    for(int i=2;i<=n;++i)
    {
        lg[i]=lg[i/2]+1;
    }
}
void precalc2(int n)
{
    for(int i=1;i<=lg[n];++i)
    {
        for(int j=1;j<=n-(1<<i)+1;++j)
        {
            lookup[i][j]=min(lookup[i-1][j],lookup[i-1][j+(1<<(i-1))]);
        }
    }
}
int query(int l, int r)
{
    return min(lookup[lg[r-l+1]][l],lookup[lg[r-l+1]][r-(1<<lg[r-l+1])+1]);
}
int main()
{
    int n,q;
    cin>>n>>q;
    for(int j=1;j<=n;++j)
        cin>>lookup[0][j];
    precalc(n);
    precalc2(n);
    for(int i=1;i<=q;++i)
    {
        int l,r;
        cin>>l>>r;
        cout<<query(l,r)<<'\n';
    }
}