Cod sursa(job #2581390)

Utilizator Mirela_MagdalenaCatrina Mirela Mirela_Magdalena Data 15 martie 2020 10:07:16
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.72 kb
#define NMAX 100005
#include <fstream>
#include <cmath>
using namespace std;

#define LOGMAX (int)(log2(NMAX))+2
#define log(n) (int)(log2(n))


ifstream f("rmq.in");
ofstream g("rmq.out");

int n, q, a, b;
int rmq[LOGMAX][NMAX];

void form_rmq()
{
    for(int l = 1; (1<<l)<=n; l++){
        for(int i=0; i + (1<<l) - 1 < n; i++)
            rmq[l][i] = min(rmq[l-1][i], rmq[l-1][i+(1<<(l-1))]);
    }
}



int main()
{
    f>>n>>q;
    for(int i = 0; i < n; ++i)
        f>>rmq[0][i];
    form_rmq();
    for(int i = 1; i <= q; ++i)
    {
        f>>a>>b;
        a--, b--;
        int val = log(b - a + 1);
        g<<min(rmq[val][a], rmq[val][b-(1<<(val))+1])<<'\n';
    }
    return 0;
}