Cod sursa(job #2752817)

Utilizator blxqnAlina Voiculescu blxqn Data 19 mai 2021 18:48:41
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <math.h>

using namespace std;

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

int n, rmq[50][100001];

void initialization()
{
    for(int i = 0; i < 20; i++)
        for(int j = 0; j < 100001; j++)
            rmq[i][j] = 100005;
}

void precompute()
{
    for (int i = 1; pow(2, i) <= n; i++)
        for(int j = 0; j < n; j++)
            rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (int)pow(2, i - 1)]);
}

int minimumQuery(int i, int j)
{
    int maxPow = 1, index = 0;
    while (maxPow * 2 <= j - i + 1)
    {
        maxPow *= 2;
        index++;
    }
    return min(rmq[index][i], rmq[index][j - maxPow + 1]);
}

int main()
{
    int m, x, y;
    fin>>n>>m;

    initialization();

    for (int i = 0; i < n; i++)
        fin>>rmq[0][i];

    precompute();

    for (int i = 1; i <= m; i++)
    {
        fin>>x>>y;
        fout<<minimumQuery(x - 1, y - 1)<<"\n";
    }
    return 0;
}