Cod sursa(job #3343963)

Utilizator Matei_AndronacheMatei Andronache Matei_Andronache Data 28 februarie 2026 19:55:24
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in ("rmq.in");
ofstream out ("rmq.out");
int r[100067][18];
int e[100067];
int v[100067];
void build(int n)
{
    for (int i=1;i<=n;i++)
    {
        r[i][0]=v[i];
    }
    for (int p=1;(1<<p)<=n;p++)
    {
        for (int i=1;i<=n;i++)
        {
            r[i][p]=r[i][p-1];
            int j=i+(1<<(p-1));
            if (j<=n)
                r[i][p]=min(r[i][p],r[j][p-1]);
        }
    }
    e[1]=0;
    for (int i=2;i<=n;i++)
    {
        if (i>=(1<<(e[i-1]+1)))
            e[i]=e[i-1]+1;
        else
            e[i]=e[i-1];
        //out<<i<<" "<<(1<<e[i])<<endl;
    }
}
int query(int st,int dr)
{
    int l=dr-st+1;
    return min(r[st][e[l]],r[dr-(1<<e[l])+1][e[l]]);
}
int main()
{
    int n,m;
    in>>n>>m;
    for (int i=1;i<=n;i++)
    {
        in>>v[i];
    }
    build(n);
    int st,dr;
    for (int i=1;i<=m;i++)
    {
        in>>st>>dr;
        out<<query(st,dr)<<'\n';
    }
    return 0;
}