Cod sursa(job #2888530)

Utilizator nicuhasCemartan Nicolae nicuhas Data 11 aprilie 2022 15:41:24
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;
int rmq[21][100001];
int main(){
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");
    int a,b,n,p=1,ap=0,q,l,i,min1=10000001;
    fin>>n>>q;
    for(i=1;i<=n;i++){
        fin>>rmq[0][i];
    }
    while(p<n){
        p*=2;
        ap++;
        for(i=1;i+p-1<=n;i++){
            rmq[ap][i]=min(rmq[ap-1][i],rmq[ap-1][i+p/2]);
           // cout<<rmq[ap][i]<<" ";
        }
        //cout<<"\n";
    }
    for(i=1;i<=q;i++){
        fin>>a>>b;
        l=b-a+1;
        p=1;
        ap=0;
        while(p<=l){
            p*=2;
            ap++;
        }
        p/=2;
        ap--;
        min1=min(rmq[ap][a],rmq[ap][b-p+1]);
        fout<<min1<<"\n";
    }
    return 0;
}