Cod sursa(job #3038101)

Utilizator tudoor_balasescuBalasescu Tudor tudoor_balasescu Data 26 martie 2023 20:30:43
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.64 kb
#include <fstream>
#include <cmath>

using namespace std;
ifstream fin("rmq.in");
ofstream fout("rmq.out");
long long n,q,i,expp,p2,st,dr,lg,rez,p[17],rmq[20][100001];
int main()
{
    fin>>n>>q;
    for(i=1; i<=n; i++)
        fin>>rmq[0][i];
    p[0]=1;
    for(expp=1,p2=2; p2<=n; expp++,p2*=2)
    {
        p[expp]=p2;
        for(i=1; i<=n-p2+1; i++)
            rmq[expp][i]=min(rmq[expp-1][i],rmq[expp-1][i+p2/2]);
    }
    for(i=1; i<=q; i++)
    {
        fin>>st>>dr;
        lg=dr-st+1;
        expp=log2(lg);
        rez=min(rmq[expp][st],rmq[expp][dr-p[expp]+1]);
        fout<<rez<<'\n';
    }
    return 0;
}