Cod sursa(job #3288023)

Utilizator LucaMirsolea14Luca Mirsolea LucaMirsolea14 Data 20 martie 2025 12:55:02
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include<fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");

int a[100002][17], log[100002];

int n,v[100002];

void Precalc_rmq(){

    int i,j,p;

    for(i=1;i<=n;i++)
        a[0][i]=v[i];

    for(p=1;(1<<p) <= n;p++){

        for(i=1;i<= n;i++){

            a[p][i] = a[p-1][i];

            if(i + (1<<(p-1)) <= n)
                a[p][i] = min(a[p][i], a[p-1][i+(1<<(p-1))]);

        }

    }

}

void Precalc_log(){

int i,nr=0;

log[1]=0;

for(i=2;i<=100000;i++)
   log[i]=log[i/2]+1;

}

int main(){

int q,st,dr,i,logg,len,j;

Precalc_log();

fin>>n>>q;

for(i=1;i<=n;i++)
    fin>>v[i];

Precalc_rmq();

while(q--){

    fin>>st>>dr;

    logg=log[dr-st+1];

    len=(1<<logg);

    fout<<min(a[logg][st], a[logg][dr-len+1])<<'\n';

}

}