Cod sursa(job #2916533)

Utilizator AndreiBOTOBotocan Andrei AndreiBOTO Data 30 iulie 2022 13:08:19
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.81 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

const int NMAX=1e5+5;
int v[NMAX];
int rmq[20][NMAX];
int lgg[NMAX];
int lungime[NMAX],kon;

int main()
{
    int x,y,m,st,dr,calc,k,n,i,j;
    fin>>n;
    fin>>m;
    for(i=1;i<=n;i++)
        fin>>v[i];
    for(i=1;i<=n;i++)
        rmq[0][i]=v[i];
    for(i=2;i<=n;i++)
        lgg[i]=lgg[i/2]+1;
    for(i=1;(1<<i)<=n;i++)
        lungime[++kon]=i;
    for(j=1;j<=kon;j++)
    {
        for(i=1;i<=n;i++)
            rmq[j][i]=min(rmq[j-1][i],rmq[j-1][i+(1<<(j-1))]);
    }
    for(i=1;i<=m;i++)
    {
        fin>>st>>dr;
        calc=dr-st+1;
        k=lgg[calc];
        fout<<min(rmq[k][st],rmq[k][dr-(1<<k)+1])<<"\n";
    }
    return 0;
}