Cod sursa(job #3288033)

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

int a[100002][17], vlog[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];

            j=i + (1<<(p-1));

            if(j <= n && a[p][i] > a[p-1][j] )
                a[p][i] = a[p-1][j];

        }

    }

}

void Precalc_log(){

int i,nr=0;

vlog[1]=0;

for(i=2;i<=n;i++)
   vlog[i]=vlog[i/2]+1;

}

int main(){

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

fin>>n>>q;

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

Precalc_rmq();

Precalc_log();

//for(i=1;i<=n;i++)
//    fout<<vlog[i]<<" ";

while(q--){

    fin>>st>>dr;

    e=vlog[dr-st+1];

    len=(1<<logg);

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

}

}