Cod sursa(job #1160732)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 30 martie 2014 19:01:50
Problema Range minimum query Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.71 kb
#include <fstream>
using namespace std;

const int MAX_N = 100002;

int N, M;
int A[MAX_N][20], log2[MAX_N];

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

    f >> N >> M;
    for(int i = 1; i <= N; ++i)
        f >> A[i][0];

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

    for(int i = 2; i < MAX_N; ++i)
        log2[i] = log2[i / 2] + 1;

    for(int i = 1, x, y; i <= M; ++i) {
        int k = log2[y - x + 1], ans = 0;
        
        f >> x >> y;

        ans = min(A[x][k], A[y - (1 << k) + 1][k]);

        g << ans << "\n";
    }

    f.close();
    g.close();

    return 0;
}