Cod sursa(job #2374989)

Utilizator Fatu_SamuelFatu Samuel Fatu_Samuel Data 7 martie 2019 21:39:36
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>

using namespace std;

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

int a[100005][20];

int lg2(int x)
{
    int rez = 0;

    while(x > 1)
    {
        x >>= 1;
        rez++;
    }

    return rez;
}


int main()
{
    int n, q;

    fin >> n >> q;

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

    for(int j = 1; (1 << j) <= n; j++)
    {
        int l = n - (1 << j) + 1;

        for(int i = 1; i <= l; i++)
            a[i][j] = min(a[i][j - 1], a[(1 << (j - 1)) + i][j - 1]);

    }

    int x, y;

    for(int i = 1; i <= q; i++)
    {
        fin >> x >> y;

        int l = lg2(y - x);

        fout << min(a[x][l], a[y - (1 << l) + 1][l]) << '\n';
    }



    fin.close();
    fout.close();
    return 0;
}