Cod sursa(job #2374992)

Utilizator Fatu_SamuelFatu Samuel Fatu_Samuel Data 7 martie 2019 21:40:50
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 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;
}