Cod sursa(job #3164127)

Utilizator armand09Armand Miron armand09 Data 2 noiembrie 2023 10:48:22
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
using namespace std;

#define ll long long
#define ull unsigned long long
#define pb push_back
#define pf push_front
#define FASTIO ios::sync_with_stdio(false) , cin.tie(0) , cout.tie(0)
#define pii pair<int , int>

const int MOD = 1e9 + 7;
const int MAX = 1e5 +5;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
int n,q;
int v[MAX];
int RMQ[27][MAX];
int query(int l,int r)
{
    int lg = 1;
    while((1<<lg) <= (r-l+1))
        lg++;

    return min(RMQ[lg-1][l],RMQ[lg-1][r-(1<<(lg-1))+1]);
}
int32_t main()
{
    FASTIO;
    fin>>n>>q;
    for(int i=1;i<=n;i++)
        fin>>v[i];
    for(int i=1;i<=n;i++)
        RMQ[0][i] = v[i];

    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<=q;i++)
    {
        int l,r; fin>>l>>r;
        fout<<query(l,r)<<'\n';
    }
}