Cod sursa(job #3330080)

Utilizator RaduCalisovCalisovRadu RaduCalisov Data 17 decembrie 2025 14:37:29
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.85 kb
#include <bits/stdc++.h>
using namespace std;

int n,m;
vector<vector<int>> v;

int main() {
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");
    cin>>n>>m;
    
    vector<int> log(1e5 + 1);

    log[1] = 0;

    for(int i=2;i<=1e5;i++)
        log[i] = log[i/2] + 1;

    vector<int> pow2(log[n]+1);

    pow2[0] = 1;
    for(int i=1;i<=log[n];i++)
        pow2[i] = pow2[i-1] * 2;

    v.resize(n+1,vector<int>(log[n]+1));

    for(int i=1;i<=n;i++)
        cin>>v[i][0]; 
    int pow = 1;
    for(int j=1;j<=log[n];j++){
        pow *= 2;
        for(int i=1;i<=n-pow/2;i++)
            v[i][j] = min(v[i][j-1],v[i+pow/2][j-1]);
    }

    for(int i=1;i<=m;i++){
        int l,r;
        cin>>l>>r;

        int range = r - l + 1;

        int fi = v[l][log[range]];
        int si = v[r-pow2[log[range]]+1][log[range]];

        cout<<min(fi,si)<<"\n";
    }
}