Cod sursa(job #3144807)

Utilizator TheAndreiEnache Andrei Alexandru TheAndrei Data 10 august 2023 18:58:44
Problema Range minimum query Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <iostream>
#include <fstream>
#include <math.h>

#define inf 2147483647

using namespace std;

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

int v[100001], batog[317], batog_size, n, sq;

void build_batog(){
    int mini=inf;
    int i;
    for(i=0;i<n;i++){
        mini = mini < v[i]? mini: v[i];
        if((i+1)%sq==0){
            batog[i/sq]=mini;
            mini=inf;
        }
    }
    batog[i/sq]=mini;
}

int main(){
    int m, x, y, idx=-1, el_min;
    fin>>n>>m;

    sq=sqrt(n);
    batog_size=(n+sq-1)/sq;
    for(int i=0;i<n;i++){
        fin>>v[i];
    }

    build_batog();

    for(int i=0;i<m;i++){
        fin>>x>>y;
        x--;y--;
        el_min = inf;

        while(x<=y) {
            if(x % sq == 0 && x + sq <= y){
                el_min=el_min < batog[x / sq] ? el_min: batog[x/sq];
                x += sq;
            }
            else {
                el_min=el_min < v[x] ? el_min: v[x];
                x++;
            }
        }
        fout<<el_min<<"\n";
    }
}