Cod sursa(job #3160320)

Utilizator Utucora2017Nicolae Utucora2017 Data 23 octombrie 2023 18:10:01
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include<fstream>
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int rmq[20][100001];
int main(){
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>rmq[0][i];
    }
    for(int p=1;(1<<p)<=n;p++){
        for(int i=1;i<=n;i++){
            rmq[p][i]=rmq[p-1][i];
            int j=1<<(p-1);
            if(j+i<=n&&rmq[p][i]>rmq[p-1][i+j])
                rmq[p][i]=rmq[p-1][i+j];
        }
    }
    for(int k=1;k<=m;k++){
        int st,dr;
        cin>>st>>dr;
        int len=dr-st+1;
        int p=0,pp=1;
        while(pp*2<=len)
            pp*=2,p++;
        cout<<min(rmq[p][st],rmq[p][dr-pp+1])<<"\n";
    }
}