Cod sursa(job #2035513)

Utilizator CammieCamelia Lazar Cammie Data 9 octombrie 2017 16:15:11
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.8 kb
#include <fstream>
#include <cmath>

#define MAXN 100002

using namespace std;

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

int D[25][MAXN], n, m, k, p2;

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

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

    k = log(n); p2 = 1;

    for (int i = 1; i <= k; i++) {
        for (int j = 1; j <= n; j++) {
            D[i][j] = min(D[i - 1][j], D[i - 1][j + p2]);
        }
        p2 *= 2;
    }
}

inline void Solve() {
    int sol, kk, x, y;
    for (int i = 1; i <= m; i++) {
        fin >> x >> y;

        kk = log(y - x + 1);

        sol = min(D[kk][x], D[kk][y - (1 << k) + 1]);

        fout << sol << "\n";
    }
}

int main () {
    Read();
    Solve();

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