Cod sursa(job #3277613)

Utilizator Victor5539Tanase Victor Victor5539 Data 16 februarie 2025 22:07:38
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.8 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");


const int MAX=1e5;
int n,m,v[MAX+5],r[20][MAX+5],p,E[MAX+5],st,dr,lungime,i;
int main()
{
    fin>>n>>m;
    for (i=1; i<=n; i++)
        fin>>v[i];

    for (i=1; i<=n; i++)
        r[0][i]=v[i];


    for (p=1; (1<<p)<=n; p++)
    {
        for (i=1; i<=n; i++)
        {
            r[p][i]=r[p-1][i];

            if (i+(1<<(p-1))<=n)
                r[p][i]=min(r[p][i],r[p-1][i+(1<<(p-1))]);
        }
    }

    E[1]=0;
    for (i=2; i<=n; i++)
    E[i]=1+E[(i>>1)];

    while (m)
    {
        fin>>st>>dr;
        lungime=E[dr-st+1];
        fout<<min(r[lungime][st],r[lungime][dr-(1<<lungime)+1])<<"\n";
        m--;
    }
    return 0;
}