Cod sursa(job #3279503)

Utilizator Octa-pe-infoNechifor Octavian Octa-pe-info Data 23 februarie 2025 12:56:55
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.95 kb
#include <iostream>
#include <bits/stdc++.h>
using namespace std;

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

vector<vector<int>>rmq(18,vector<int>(100005,1e9));///puteri dupa lungime
vector<int>a;

void build() {

    for(int i=1; i<(int)(a.size()); i++)
        rmq[0][i] = a[i];

    for(int i=1; i<=17; i++)
        for(int j=1; j + (1 << i)<(int)(a.size()); j++) {

            rmq[i][j] = min(rmq[i-1][j],rmq[i-1][j + (1 << (i-1))]);
        }
}

int query(int l,int r) {

    int mn = 1e9;

    for(int i=17; i>=0; i--) {

        if((1<<i) <= r-l+1) {

            mn = min(mn,rmq[i][l]);
            l += (1 << i);
        }
    }

    return mn;
}

int main() {

    int n,m;

    fin>>n>>m;

    a.resize(n+2);

    for(int i = 1;i<=n;i++)
        fin>>a[i];

    build();

    for(int i=1;i<=m;i++){

        int x,y;
        fin>>x>>y;
        fout<<query(x,y)<<'\n';
    }

    return 0;
}