Cod sursa(job #3338014)

Utilizator stefantironTiron Stefan stefantiron Data 31 ianuarie 2026 10:43:45
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.86 kb
#include <fstream>
#include <vector>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");

int n,m;

int a[100001];


vector<int>lg;
vector<vector<int>>rmq;

int query(int st,int dr)
{
    int l=lg[dr-st+1];
    return min(rmq[st][l],rmq[dr-(1<<l)+1][l]);
}

int main()
{
    int st,dr;
    fin>>n>>m;
    for(int i=1;i<=n;i++)
    {
        fin>>a[i];
    }
    lg=vector<int>(n+1);
    for(int i=2;i<=n;i++)
        lg[i]=lg[i/2]+1;

    rmq=vector<vector<int>>(n + 1, vector<int>(lg[n] + 1 , INT_MAX));

    for(int i=1;i<=n;i++)
        rmq[i][0]=a[i];

    for(int j=1;j<=lg[n];j++)
        for(int i=1;i+(1<<j)-1<=n;i++)
            rmq[i][j]=min(rmq[i][j-1],rmq[i + (1 << (j - 1))][j-1]);

    for(int i=1;i<=m;i++)
    {
        fin>>st>>dr;
        fout<<query(st,dr)<<'\n';
    }

    return 0;
}