Cod sursa(job #3264884)

Utilizator ioanxhIoan Xh ioanxh Data 25 decembrie 2024 11:26:13
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <bits/stdc++.h>
using namespace std;
const string file="rmq";
ifstream f(file+".in");
ofstream g(file+".out");

#define DD 100001
int r[17][DD],e[DD];
int n,m,dr,st,mini,p,l,E,j;
int main(){
    f>>n>>m;
    for(int i=1; i<=n; ++i) f>>r[0][i];
    for(int p=1; (1<<p)<=n; ++p){
        for(int i=1; i<=n; ++i){
            r[p][i]=r[p-1][i];
            j=i+(1<<(p-1));
            if(j<=n && r[p][i]>r[p-1][j])
                r[p][i]=r[p-1][j];
        }
    }
    e[1]=0;
    for(int i=2; i<=n; ++i) e[i]=1+e[i/2];
    for(int i=1; i<=m; ++i){
        f>>st>>dr;
        E=e[dr-st+1];
        l=(1<<E);
        g<<min(r[E][st],r[E][dr-l+1])<<'\n';
    }
    return 0;
}