Cod sursa(job #3298801)

Utilizator Grama2008Grama Andrei Teodor Grama2008 Data 1 iunie 2025 20:52:20
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#include <bits/stdc++.h>

using namespace std;

const int N=1e5+1;

const int K=18;

int st[K+1][N+5];

int log2_floor(unsigned long long x){
    return x ? __builtin_clzll(1)-__builtin_clzll(x) : -1;
}

int main()
{
    freopen("rmq.in", "r", stdin);
    freopen("rmq.out", "w", stdout);
    ios::sync_with_stdio(false);
    int n,m;
    cin>>n>>m;
    for (int i=0;i<n;i++){
        cin>>st[0][i];
    }
    for (int i=1;i<=K;i++){
        for (int j=0;j+(1<<(i))<=N;j++){
            st[i][j]=min(st[i-1][j], st[i-1][j+(1<<(i-1))]);
        }
    }
    for (int j=0;j<m;j++){
        int r,l;
        cin>>l>>r;r--;l--;
        int x=log2_floor(r-l+1);
        cout<<min(st[x][l], st[x][r-(1<<(x))+1])<<'\n';
    }
    return 0;
}