Cod sursa(job #3290400)

Utilizator Matei_AndronacheMatei Andronache Matei_Andronache Data 30 martie 2025 17:06:53
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.92 kb
#include <fstream>

using namespace std;
ifstream cin ("rmq.in");
ofstream cout ("rmq.out");
int r[100001][18];
int E[100001];
int v[100001];
int built (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++)
        E[i] = 1 + E[i/2];
}
int query (int st,int dr)
{
    int e=E[dr-st+1],l=1<<e;
    return min(r[st][e],r[dr-l+1][e]);
}
int main()
{
    int n,m;
    cin>>n>>m;
    for (int i=1;i<=n;i++)
    {
        cin>>v[i];
    }
    built (n);
    int st,dr,e;
    for (int i=1;i<=m;i++)
    {
        cin>>st>>dr;
        cout<<query(st,dr)<<'\n';
    }
    return 0;
}