Cod sursa(job #2999263)

Utilizator vlad_maneaManea Vlad Cristian vlad_manea Data 10 martie 2023 19:07:09
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int n, m, r[18][100002], lg[100002], a[100002];

void citire_sir() {
    fin>>n>>m;
    for (int i=1; i<=n; i++)
        fin>>a[i];
}

void rmq() {
    lg[1]=0;
    for (int i=2; i<=n; i++)
        lg[i]=lg[i/2]+1;

    for (int i=1; i<=n; i++)
        r[0][i]=a[i];

    for (int i=1; (1<<i)<=n; i++)
        for (int j=1; j<=n-(1<<i)+1; j++) {
            int l=1<<(i-1);
            r[i][j]=min(r[i-1][j], r[i-1][j+l]);
        }
}

void queries() {
    int x, y;
    for (int i=1; i<=m; i++) {
        fin>>x>>y;
        int diff=y-x+1, l=lg[diff], sh=diff-(1<<l);
        fout<<min(r[l][x], r[l][x+sh])<<"\n";
    }
}

int main() {
    citire_sir();
    rmq();
    queries();
    return 0;
}