Cod sursa(job #3213736)

Utilizator Raul_AArdelean Raul Raul_A Data 13 martie 2024 13:21:33
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <bits/stdc++.h>
#define eb emplace_back
#define pii pair<int, int>
#define tpl tuple<int, int, int>
#define oo INT_MAX >> 1
#define ll long long
using namespace std;

const string fn("rmq");

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

#define cin in
#define cout out

const int MAX=1e5;

int n,k,v[MAX+5],Log[MAX+5],rmq[18][MAX+5];

int query(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>>k;
    cin>>v[1];
    Log[1]=0;
    rmq[0][1]=v[1];
    for(int i=2;i<=n;i++)
        cin>>v[i],rmq[0][i]=v[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(k--)
    {
        int l,r;
        cin>>l>>r;
        cout<<query(l,r)<<'\n';
    }
    return 0;
}