Cod sursa(job #3321574)

Utilizator Vlad10Vlad Negut Vlad10 Data 10 noiembrie 2025 11:21:05
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin ("rmq.in");
ofstream fout ("rmq.out");
int n,m;
int v[100001];
int log[100001];
int rmq[100001][21];
int main()
{
    fin>>n>>m;
    int p=1, c =0 ;
    for(int i=1;i<=n;i++){
        if(i==p*2){
            p*=2;
            c++;
        }
        log[i] = c;
    }
    for(int i=1;i<=n;i++){
        fin>>v[i];
        rmq[i][0] = v[i];
    }
    //implementare rmq
    p =2;
    for(int i=1;p<=n;i++){
        for(int j=p;j<=n;j++){
            rmq[j][i] = min(rmq[j][i-1], rmq[j-p/2][i-1]);
        }
        p*=2;
    }
    int l, r,len,pow;
    for(int i=1;i<=m;i++){
        fin>>l>>r;
        len=r-l+1;
        p = log[len];
        pow=(1<<p);
        fout<<min(rmq[l+pow-1][p], rmq[r][p])<<'\n';
    }
    return 0;
}