Cod sursa(job #1775348)

Utilizator FlorinHajaFlorin Gabriel Haja FlorinHaja Data 10 octombrie 2016 11:50:34
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>

using namespace std;

ifstream f("rmq.in");
ofstream g("rmq.out");

int a[100001], n, m, i, j, l, delta, df, x, y;
int lg[100001];
int rmq[18][100001];

int main() {
    f >> n >> m;
    for (i = 1; i <= n; i++)
        f >> a[i];

    lg[1] = 0;
    for (i = 2; i <= n; i++)
        lg[i] = lg[i/2] + 1;

    for (i = 1; i <= n; i++)
        rmq[0][i] = a[i];

    for (i = 1; (1 << i) <= 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))]);

    while (m) {
        f >> x >> y;
        delta = y-x+1;
        l = lg[delta];
        df = delta - (1 << l);
        g << min(rmq[l][x], rmq[l][x+df]) << '\n';
        m--;
    }
    return 0;
}