Cod sursa(job #2906638)

Utilizator VipioanaMirea Oana Teodora Vipioana Data 26 mai 2022 20:39:46
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
const int N=1e5+1;
const int LOG=log2(N)+1;
int n,m;
int v[N],logr[N],r[LOG][N];

void calclog(){
    for(int i=2; i<=n; i++)
        logr[i]=1+logr[i/2];
}

void calcmat(){
    for(int i=1; i<=n; i++){
        for(int j=0; j<=logr[i]; j++)
            if(!j)
                r[j][i]=v[i];
            else
                r[j][i]=min(r[j-1][i],r[j-1][i-(1<<(j-1))]);
    }
}

int main()
{
    f>>n>>m;
    for(int i=1; i<=n; i++)
        f>>v[i];
    calclog();
    calcmat();
    for(int i=1; i<=m; i++){
        int st,dr;
        f>>st>>dr;
        int p=logr[dr-st+1];
        g<<min(r[p][dr],r[p][st+(1<<p)-1])<<'\n';
    }
    return 0;
}