Cod sursa(job #3361379)

Utilizator ililogIlinca ililog Data 23 iulie 2026 17:07:04
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
#define NMAX 100001

int n, q;
int rmq[32][NMAX];
int Log2[NMAX];

int main()
{
    fin >> n >> q;
    Log2[1] = 0;
    for (int i = 2; i<=n; i++) {
        Log2[i] = Log2[i/2]+1;
    }
    for (int i = 1; i<=n; i++) {
        fin >> rmq[0][i];
    }
    for (int p = 1; (1<<p)<=n; p++) {
        for (int i = 1; i+(1<<p)-1<=n; i++) {
            rmq[p][i] = min(rmq[p-1][i], rmq[p-1][i+(1<<(p-1))]);
        }
    }

    while(q--) {
        int st, dr;
        fin >> st >> dr;
        int len = dr-st+1;
        int e = Log2[len];
        fout << min(rmq[e][st], rmq[e][dr-(1<<e)+1]) << '\n';
    }
    return 0;
}