Cod sursa(job #3339767)

Utilizator RaduCalisovCalisovRadu RaduCalisov Data 9 februarie 2026 22:52:27
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");

int main(){
    int n,m;
    fin>>n>>m;
    vector<int> v(n+1);
    vector<int> len(n+1);

    int lastpow = 2;
    len[1] = 0;
    len[2] = 1;
    for(int i=3;i<=n;i++){
        len[i] = len[i-1];
        if(i == lastpow*2){
            lastpow *= 2;
            len[i]++;
        }
    }

    vector<vector<int>> rmq(n+1,vector<int>(len[n]+1));

    for(int i=1;i<=n;i++){
        fin>>v[i];
        rmq[i][0] = v[i];
    }

    int cnt = 1;
    for(int sz=2;sz<=n;sz*=2){
        for(int i=1;i+sz-1<=n;i++)
            rmq[i][cnt] = min(rmq[i][cnt-1],rmq[i+sz/2][cnt-1]);
        cnt++;
    }
    for(int i=1;i<=m;i++){
        int l,r;
        fin>>l>>r;
        if(l>r)
            swap(l,r);

        int p = len[r-l];

        fout<<min(rmq[l][p],rmq[r-(1<<p)+1][p])<<"\n";
    }

}