Cod sursa(job #3208467)

Utilizator Raul_AArdelean Raul Raul_A Data 28 februarie 2024 18:28:34
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>
#define ll long long
#define ld long double
#define eb emplace_back
#define pii pair<int, int>
#define tpl tuple<int, int, int>
#define oo INT_MAX / 2
using namespace std;

const string fn("rmq");

ifstream in(fn + ".in");
ofstream out(fn + ".out");

#define cin in
#define cout out

int rmq[18][100005],n,q,Log[100005];

int qrmq(int l,int r)
{
    int k=Log[r-l+1];
    return min(rmq[k][l+(1<<k)-1],rmq[k][r]);
}

int main()
{
    cin>>n>>q>>rmq[0][1];
    Log[1]=0;
    for(int i=2;i<=n;i++)
        cin>>rmq[0][i],Log[i]=Log[i/2]+1;
    for(int i=1;(1<<i)<=n;i++)  
        for(int j=(1<<i);j<=n;j++)
        {
            int k=(1<<(i-1));
            rmq[i][j]=min(rmq[i-1][j],rmq[i-1][j-k]);
        }
    
    while(q--)
    {
        int l,r;
        cin>>l>>r;
        cout<<qrmq(l,r)<<'\n';
    }
    return 0;
}