Cod sursa(job #1329578)

Utilizator okros_alexandruOkros Alexandru okros_alexandru Data 29 ianuarie 2015 17:35:46
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.84 kb
#include <fstream>

#define Lmax 18
#define Nmax 100100

using namespace std;

int N, Log2[Nmax], Rmq[Lmax][Nmax];

int query(int x, int y) {

    int l = Log2[y - x + 1];
    return min(Rmq[l][x], Rmq[l][y - (1 << l) + 1]);

}
void process() {

    int i, j;

    for(i = 2; i <= N; i++)
        Log2[i] = Log2[i >> 1] + 1;

    for(i = 1; i <= Log2[N]; i++)
        for(j = 1; j <= N - (1 << i) + 1; j++)
            Rmq[i][j] = min(Rmq[i - 1][j], Rmq[i - 1][j + (1 << (i-1))]);

}
int main() {

    int i, x, y, queries;
    ifstream in("rmq.in");
    ofstream out("rmq.out");

    in >> N >> queries;

    for(i = 1; i <= N; i++)
        in >> Rmq[0][i];

    for(process(); queries--; ) {
        in >> x >> y;
        out << query(x, y) << '\n';
    }

    in.close();
    out.close();

    return 0;
}