Cod sursa(job #2924417)

Utilizator stefanscdStefan stefanscd Data 2 octombrie 2022 08:33:16
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.63 kb
#include <fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int a[100001];
int m[100001][17];

int query(int l,int r){
    int len=r-l+1;
    int k=0;
    while((l<<(k+1))<=len)
        k++;
    return min(m[l][k],m[r-(1<<k)+1][k]);
}

int main(){
   int n,log=17;
   int q;
   cin>>n;
   cin>>q;
   for(int i=1;i<=n;++i){
    cin>>a[i];
    m[i][0]=a[i];
   }
   for(int j=1;j<log;j++){
    for(int i=1;i+(1<<j)-1<=n;i++)
        m[i][j]=min(m[i][j-1],m[i+(1<<(j-1))][j-1]);
   }
   for(int i=1;i<=q;++i){
    int l,r;
    cin>>l>>r;
    cout<<query(l,r)<<" ";
   }
return 0;
}