Cod sursa(job #1798702)

Utilizator BlackLordFMI Alex Oprea BlackLord Data 5 noiembrie 2016 12:57:43
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <fstream>

using namespace std;

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

const int N = 100010;

int n, m, i, j, k, J, x, y, aux, d[N][20], p[N];

int main(){
    fin >> n >> m;
    for (i = 1; i <= n; ++i) {
        fin >> d[i][0];
    }
    for (i = 2; i < N; ++i) {
        p[i] = p[i / 2] + 1;
    }
    for (j = 1; j <= p[n]; ++j) {
        for (i = 1; i <= n; ++i) {
            J = j - 1;
            d[i][j] = d[i][J];
            k = (1 << J);
            if (i + k <= n && d[i + k][J] < d[i][j]) {
                d[i][j] = d[i + k][J];
            }
        }
    }
    for (i = 1; i <= m; ++i) {
        fin >> x >> y;
        aux = p[y - x + 1];
        fout << min(d[x][aux], d[y - (1 << aux) + 1][aux]) << "\n";
    }
    return 0;
}