Cod sursa(job #3288775)

Utilizator Manolea_Teodor_StefanManolea Teodor Stefan Manolea_Teodor_Stefan Data 24 martie 2025 11:31:08
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.88 kb
#include <bits/stdc++.h>
//#pragma GCC optimize("O3,unroll-loops")
//#pragma GCC target("avx2,bmi,bmi2,popcnt,lzcnt")

//#define fin cin
//#define fout cout

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

const int nmax = 100001;

int n,q;

int exponent[nmax];
int rmq[nmax][32];
int main() {
    for (int i = 2; i <= n; i++)
        exponent[i] = 1 + exponent[i / 2];
    fin >> n >> q;
    for (int i = 1; i <= n; i++)
        fin >> rmq[i][0];
    for (int p = 1; (1 << p) <= n; p++) {
        for (int i = 1; i <= n; i++) {
            int j = i + (1 << (p - 1));
            if (j > n)
                j = n;
            rmq[i][p] = min(rmq[i][p - 1],rmq[j][p - 1]);
        }
    }
    while (q--) {
        int st,dr;
        fin >> st >> dr;
        int e = exponent[dr - st + 1];
        fout << min(rmq[st][e],rmq[dr - (1 << e) + 1][e]) << '\n';
    }

    return 0;
}