Cod sursa(job #2904618)

Utilizator florina15Florina florina15 Data 18 mai 2022 00:15:52
Problema Range minimum query Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.02 kb
#include <iostream>
#include <fstream>


using namespace std;

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

int n, m, x, y, v[100001], a[100001][17], log[100001];

void init()
{
    int i;
    log[1] = 0;
    for (i=2; i<=n; i++)
        log[i] = log[(i>>1)] + 1;
}

void minim(int i, int j)
{
    int m = j - i + 1;

    int k = log[m];

    if (a[i][k] <= a[j-(1<<k)+1][k])
        g << a[i][k] <<endl;
    else g << a[j-(1<<k)+1][k] <<endl;
}

void init2()
{

    int i, j;

    for(i=1; i<=n; i++)
    {
        f >> v[i];
        a[i][0] = v[i];
    }

    for (i=1; i<=17; i++)
        for(j=1; j+(1<<i)-1 <= n; j++)
            if (a[j][i-1] <= a[j+(1<<(i-1))][i-1])
                a[j][i] = a[j][i-1];
            else
                a[j][i] = a[j+(1<<(i-1))][i-1];
}

void f1()
{
    int i;

    for(i=1; i<=m; i++)
    {
        f >>  x>> y;
        minim(x, y);
    }
}

int main()
{
    f >> n >> m;

    init();

    init2();

    f1();

    return 0;
}