Cod sursa(job #3160043)

Utilizator Robert_NicuNicu Robert Cristian Robert_Nicu Data 22 octombrie 2023 20:10:43
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <bits/stdc++.h>
#define DIM 100001
using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

int n, m, st, dr, E;
int i, j;
int rmq[20][DIM], e[DIM];

int main(){
    fin>>n>>m;
    e[1]=0;

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

    for(i=2; i<=n; i++)
        e[i]=1+e[i/2];

    for(i=1; (1<<i)<=n; i++)
        for(j=1; j<=n; j++){
            rmq[i][j]=rmq[i-1][j];
            if(j+(1<<(i-1))<=n && rmq[i][j]>rmq[i-i][j+(1<<(i-1))])
                rmq[i][j]=rmq[i-1][j+(1<<(i-1))];
        }

    for(i=1; i<=m; i++){
        fin>>st>>dr;
        E=e[dr-st+1];
        fout<<min(rmq[E][st], rmq[E][dr-(1<<E)+1])<<"\n";
    }
}