Cod sursa(job #3291517)

Utilizator tudorzzzsuiu tudor tudorzzz Data 4 aprilie 2025 22:56:19
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#define MAX_N 100001
#define LOG 17
using namespace std;
ifstream cin("rmq.in");
ofstream cout("rmq.out");
int v[MAX_N];
int rmq[MAX_N][LOG];
int binary[MAX_N];
int query (int l,int r) {
    int length=r-l+1;
    int log=binary[length];
    return min(rmq[l][log],rmq[r-(1<<log)+1][log]);
}
int main() {
    int n,q;
    cin>>n>>q;
    //Creating log
    binary[1]=0;
    for (int i=2; i<=n; ++i) binary[i]=binary[i/2]+1;
    for (int i=1; i<=n; ++i) {
        cin>>v[i];
        rmq[i][0]=v[i];
    }
    //Creating rmq
    for (int j=1; j<=LOG; ++j) {
        for (int i=1; i<=n-(1<<j)+1; ++i) {
            rmq[i][j]=min(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
        }
    }
    //Answering queries
    while (q--) {
        int l,r;
        cin>>l>>r;
        cout<<query(l,r)<<'\n';
    }
}