Cod sursa(job #3341512)

Utilizator BidonTurtitBezdedan Eric BidonTurtit Data 19 februarie 2026 19:32:10
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <iostream>
#include <fstream>
#define NMax 100005
#define LMax 18
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");

int n,m,rmq[NMax][LMax],lg[NMax];

int main()
{
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        int x;
        fin>>x;
        rmq[i][0]=x;
    }
    lg[1]=0;
    for(int i=2;i<=n;i++)
    {
        lg[i]=lg[i/2]+1;
    }
    for(int j=1;1<<j<=n;j++)
    {
        for(int i=1;i+(1<<j)-1<=n;i++)
        {
            if(rmq[i][j-1]<=rmq[i+(1<<(j-1))][j-1])
               rmq[i][j]=rmq[i][j-1];
            else
                rmq[i][j]=rmq[i+(1<<(j-1))][j-1];
        }
    }
    for(int i=1;i<=m;i++)
    {
        int a,b,len;
        fin>>a>>b;
        len=b-a+1;
        fout<<min(rmq[a][lg[len]],rmq[b-(1<<lg[len])+1][lg[len]])<<"\n";

    }
}