Cod sursa(job #2067058)

Utilizator CammieCamelia Lazar Cammie Data 15 noiembrie 2017 19:50:47
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.83 kb
#include <fstream>
#include <cmath>

#define MAXN 100005

using namespace std;

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

int a[22][MAXN], n, m, q;

inline void Read() {
    fin >> n >> q;

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

inline void RMQ() {
    int m = log2(n), pow = 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 + pow]);
        }
        pow *= 2;
    }
}

inline void Query() {
    int aa, bb, val, nn;

    for (int i = 1; i <= q; i++) {
        fin >> aa >> bb;
        nn = log2(bb - aa + 1);
        val = 1 << nn;
        fout << min(a[nn][aa], a[nn][bb - val + 1]) << "\n";
    }
}

int main () {
    Read();
    RMQ();
    Query();

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