Cod sursa(job #3233876)

Utilizator Bubu_OrangeAlin Lupau Bubu_Orange Data 5 iunie 2024 11:51:54
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include<bits/stdc++.h>

using namespace std;

ifstream in("rmq.in");
ofstream out("rmq.out");

int n, m, st, dr;
int r[20][100000];
int lg[100005];

int main(){
    lg[1]=0;
    for(int i=2; i<=100005; i++){
        lg[i]=lg[i/2]+1;
    }
    in>>n>>m;
    for(int i=1; i<=n; i++){
        in>>r[0][i];
    }
    int p=1;
    for(int i=1; i<=lg[n]; i++){
        p*=2;
        for(int j=1; j<=n-p+1; j++){
            r[i][j]=min(r[i-1][j], r[i-1][j+p/2]);
        }
    }
    for(int i=1; i<=m; i++){
        in>>st>>dr;
        int sz=lg[dr-st+1];
        int mn=min(r[sz][st], r[sz][dr-(1<<sz)+1]);
        out<<mn<<'\n';
    }
    return 0;
}