Cod sursa(job #3326875)

Utilizator mariusharabariMarius Harabari mariusharabari Data 30 noiembrie 2025 23:15:45
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

const int NMAX=1e5+1;
int n, m, rmq[NMAX][17];
int p2[17];

int main(){
    fin>>n>>m;
    for(int i=1;i<=n;i++){
        fin>>rmq[i][0];
    }
    int maxe=log2(n);
    //cout<<maxe<<endl;
    p2[0]=1;
    for(int i=1;i<=maxe;i++)
        p2[i]=p2[i-1]*2;

    for(int i=1;i<=maxe;i++){
        int maxj=n-p2[i]+1;
        for(int j=1;j<=maxj;j++){
            rmq[j][i]=min(rmq[j][i-1], rmq[j+p2[i-1]][i-1]);
            //cout<<i<<' '<<j<<' '<<rmq[j][i]<<endl;
        }
    }

    int l, r;
    for(int i=0;i<m;i++){
        fin>>l>>r;
        int e=log2(r-l+1);
        //cout<<l<<' '<<r<<' '<<e<<endl;
        int ans=min(rmq[l][e], rmq[r-p2[e]+1][e]);
        fout<<ans<<endl;
    }
    return 0;
}