Cod sursa(job #2071851)

Utilizator netfreeAndrei Muntean netfree Data 21 noiembrie 2017 08:42:07
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>

using namespace std;

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

const int N_MAX = 100000 + 5;

int a[20][N_MAX], n, m;

int query(int lo, int hi){
    int m = log2(hi-lo+1);
    int val = 1 << m;
    return min(a[m][lo], a[m][hi-val+1]);
}

void prefabricare(){
    int m = log2(n), p = 1;
    for(int i = 1; i<=m; ++i){
        for(int j = 1; j<=n; ++j)
            a[i][j] = min(a[i-1][j], a[i-1][j+p]);
        p *= 2;
    }
}

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

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

    prefabricare();

    while(m--){
        int a, b; fin >> a >> b;
        fout << query(a, b) << "\n";
    }

    return 0;
}