Cod sursa(job #2575926)

Utilizator mihneacazCazacu Mihnea mihneacaz Data 6 martie 2020 16:15:15
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <cmath>
#include <algorithm>

using namespace std;

const int NMAX = 1e5 + 5;
const int LOG = 20;

ifstream cin("rmq.in");
ofstream cout("rmq.out");

int v[NMAX], d[NMAX][LOG];

int main()
{
    int n, q;
    cin >> n >> q;
    for(int i = 1; i <= n; ++i) {
        cin >> v[i];
    }
    for(int i = 1; i <= n; ++i) {
        d[i][0] = v[i];
    }
    for(int i = n; i >= 1; --i) {
        for(int j = 1; i + (1 << (j - 1)) <= n; ++j) {
            d[i][j] = min(d[i][j - 1], d[i + (1 << (j - 1))][j - 1]);
        }
    }
    for(int i = 1; i <= q; ++i) {
        int st, dr;
        cin >> st >> dr;
        int dif = dr - st + 1;
        int lg = (int)log2(dif);
        int ans = min(d[st][lg], d[dr - (1 << lg) + 1][lg]);
        cout << ans << "\n";
    }
    return 0;
}