Cod sursa(job #2173042)

Utilizator FredyLup Lucia Fredy Data 15 martie 2018 20:02:00
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <iostream>
#include <fstream>

using namespace std;

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

#define lim 100010
int n,m,rmq[18][lim],log2[lim];

int main()
{
    int i,j,a,b,lg;
    fin>>n>>m;
    for (i=1; i<=n; i++)    fin>>rmq[0][i];

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

    log2[1]=0, log2[2]=1;
    for (i=3; i<=n; i++)    log2[i] = log2[i/2]+1;

    for (i=1; i<=m; i++)
    {
        fin>>a>>b;
        lg = log2[b-a];
        fout << min (rmq[lg][a], rmq[lg][b-(1<<lg)+1])<<'\n';
    }

    return 0;
}