Cod sursa(job #3283229)

Utilizator IleaIlea Bogdan Ilea Data 8 martie 2025 17:53:11
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.94 kb
#include <iostream>
using namespace std;

// punem 33 pt ca ar trebi sa fie log2(n) da log2(INT_MAX) ii 32 asa ca ajunge numa 33
int n, m, rmq[33][100001], // matricea unde se precalculeaza si saveaza rmq
            lg2[100001]; // momoram log2(x) pt ca ar dura prea mult sa calculam log2 de fiecare data
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    freopen("rmq.in", "r", stdin);
    cin>>n>>m;
    for (int i=1; i<=n; ++i){
        cin>>rmq[0][i];
        if (i>1) lg2[i]=1+lg2[i>>1]; // initializam lg2 cu 1+lg(ultima putere a lui 2 dinainte)
    }
    for(int i=1; i<=lg2[n]; ++i){
        for(int j=(1<<i); j<=n; ++j){
            rmq[i][j]=min(rmq[i-1][j-(1<<(i-1))], rmq[i-1][j]);
        }
    }
    freopen("rmq.out", "w", stdout);
    while (m--){
        int x, y;
        cin>>x>>y;
        int l=lg2[y-x+1];
        cout<<min(rmq[l][x+(1<<l)-1], rmq[l][y])<<"\n";
    }
    return 0;
}