Cod sursa(job #2758226)

Utilizator D4R1U5Sava Darius D4R1U5 Data 9 iunie 2021 10:16:10
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int n,m,rmq[18][100005],lg[100001],v[100001],L,R;

static inline void logaritm(){
    lg[1]=0;
    for (int i=2;i<=n;i++) lg[i]=lg[i/2]+1;
}

int main()
{
    f>>n>>m;
    for (int i=1;i<=n;i++)
        f>>v[i];
    for (int i=1;i<=n;i++)
        rmq[0][i]=v[i];

    logaritm();

    for(int i = 1; (1<<i)<=n; i++)
        for (int j=1; j+(1<<i)-1<=n; j++)
            rmq[i][j] = min(rmq[i-1][j], rmq[i-1][j +(1<<(i-1))]);

    for (int i=1;i<=m;i++){
        f>>L>>R;
        int lungime = R-L+1;
        int log = lg[lungime];
        int d = lungime - (1<<log);
        g<< min(rmq[log][L], rmq[log][L+d])<<'\n';
    }
    return 0;
}