Cod sursa(job #2042330)

Utilizator toadehuPuscasu Razvan Stefan toadehu Data 18 octombrie 2017 14:38:44
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <fstream>
#include <cmath>

#define Nmax 100011
#define LgN 20

using namespace std;

int rmq[Nmax][LgN],v[Nmax],n,m;

int main()
{
    ifstream fin ("rmq.in");
    ofstream fout ("rmq.out");
    fin>>n>>m;
    for (int i=1;i<=n;++i)
    {
        fin>>v[i];
        rmq[i][0]=v[i];
    }
    for (int j=1;j<=18;++j)
    {
        for (int i=1;i<=n-(1<<j)+1;++i)
        {
            rmq[i][j]=min(rmq[i][j-1],rmq[i+(1<<(j-1))][j-1]);
        }
    }
    for (int i=1;i<=m;++i)
    {
        int st,dr;
        fin>>st>>dr;
        int k=log2(dr-st+1);
        fout<<min(rmq[st][k],rmq[dr-(1<<k)+1][k])<<"\n";
    }
}