Cod sursa(job #965199)

Utilizator FlameingoAiordachioaei Marius Flameingo Data 23 iunie 2013 17:47:07
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.78 kb
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;

const int DMAX = 100004;
vector <int> RMQ[18];
int log2 [DMAX];

int main() {

    freopen ("rmq.in", "r", stdin);
    freopen ("rmq.out","w",stdout);

    int N, M, i, j, a, b, l;

    log2[1] = 0;
    scanf ("%d%d", &N, &M);
    for (i = 1; i <= N; ++i)
        scanf ("%d", &a), RMQ[0].push_back (a), log2[i + 1] = log2[(i + 1) / 2] + 1;
    for (i = 1; (1 << i) <= N; ++i) {
        l = 1 << i - 1;
        for (j = 0; j <= N - (1 << l); ++j)
            RMQ[i].push_back (min (RMQ[i - 1][j], RMQ[i - 1][j + l]));
    }
    while (M--)
        scanf ("%d%d", &a, &b),
        l = b - a + 1,
        printf ("%d\n", min (RMQ[log2[l]][a - 1], RMQ[log2[l]][a + l - (1 << log2[l]) - 1]));

}