Cod sursa(job #3254594)

Utilizator vladorovOroviceanu Vlad vladorov Data 8 noiembrie 2024 08:06:28
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <cmath>

using namespace std;

int rmq[100000][17];
int e[100000];

int main(){
    ifstream fin("rmq.in");
    ofstream fout("rmq.out");

    int n, m; fin>>n>>m;

    for(int i=0; i<n; i++){
        fin>>rmq[i][0];
    }

    for(int p=1; (1<<p)<=n; p++){
        for(int i=0; i<n; i++){
            rmq[i][p]=rmq[i][p-1];

            int j=i+(1<<(p-1));
            if(j<n){
                rmq[i][p]=min(rmq[i][p], rmq[j][p-1]);
            }
        }
    }

    e[1]=0;
    for(int i=2; i<n; i++){
        e[i]=1+e[i/2];
    }

    for(int k=0; k<m; k++){
        int st, dr; fin>>st>>dr; st--; dr--;

        int exp=e[dr-st+1];

        int rez=min(rmq[st][exp], rmq[dr-(1<<exp)+1][exp]);
        fout<<rez<<endl;
    }

    return 0;
}