Cod sursa(job #964721)

Utilizator Mihai22eMihai Ionut Enache Mihai22e Data 22 iunie 2013 10:54:35
Problema Range minimum query Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <fstream>
using namespace std;

const int MAX_N = 100002;

int N, M;
int v[MAX_N], A[MAX_N][20], log[MAX_N];

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

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

    for(int i = 2; i <= N; ++i)
        log[i] = log[i/2] + 1;
    for(int i = 1; i <= N; ++i)
        A[i][0] = v[i];
    for(int j = 1; (1 << j) <= N; ++j)
        for(int i = 1; i + (1 << j) - 1 <= N; ++i)
            A[i][j] = min(A[i + (1 << (j-1))][j-1], A[i][j-1]);

    for(int i = 1, x, y; i <= M; ++i){
        f >> x >> y;
        int k = log[y - x + 1];
        g << min(A[x][k], A[y-(1 << k)+1][k]) << '\n';
    }

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

    return 0;
}