Cod sursa(job #3356615)

Utilizator natalia_denisa14Natalia natalia_denisa14 Data 2 iunie 2026 18:57:57
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>
#define nmax 100002
using namespace std;
ifstream f("rmq.in");
ofstream g("rmq.out");
int sp[nmax][20];
vector<int> arr;
int n,q,st,dr;
void build_sp() {
    for (int i=1;i<=n;i++) sp[i][0]=arr[i];
    for (int j=1;j<=log2(n);j++) {
        for (int i=0;i<=n;i++) {
            if (i+(1<<j)-1<=n) {
                    sp[i][j]=min(sp[i][j-1],sp[i+(1<<(j-1))][j-1]);
            }
        }
    }
}
int query(int st, int dr) {
    int len=dr-st+1;
    int k=log2(len);
    return min(sp[st][k],sp[dr-(1<<k)+1][k]);
}
int main() {
    f>>n>>q;
    arr.resize(n+1);
    arr[0]=INT_MAX;
    for (int i=1;i<=n;i++) f>>arr[i];
    build_sp();
    for (int i=1;i<=q;i++) {
        f>>st>>dr;
        g<<query(st,dr)<<'\n';
    }

}