Cod sursa(job #3296338)

Utilizator iordacheMatei Iordache iordache Data 12 mai 2025 12:06:42
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>
#define pb push_back
//#define int long long
using namespace std;
const int N=1e5+5,LOG=20;
int lg[N],rmq[N][LOG];
int query(int l, int r)
{
    int sz=r-l+1;
    return min(rmq[l][lg[sz]],rmq[r-(1<<lg[sz])+1][lg[sz]]);
}
signed main()
{
    ifstream cin("rmq.in");ofstream cout("rmq.out");
    int n,q;
    cin>>n>>q;
    for(int i=1;i<=n;++i) cin>>rmq[i][0];
    lg[1]=0;
    for(int i=2;i<=n;++i) lg[i]=lg[i/2]+1;
    for(int j=1;j<=lg[n];++j)
    {
        for(int i=1;i+(1<<j)-1<=n;++i)
        {
            rmq[i][j]=min(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
        }
    }
    while(q--)
    {
        int l,r;cin>>l>>r;
        cout<<query(l,r)<<'\n';
    }
}