Cod sursa(job #3238509)

Utilizator gugalcromMuntoiu Vlad-Ioan gugalcrom Data 26 iulie 2024 11:55:12
Problema Range minimum query Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.74 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin("rmq.in");
ofstream fout("rmq.out");
unsigned int a[100000], log[100000], m[18][100000];

int main() {
    log[1] = 0;
    unsigned int N, M, p, i, l, r;
    fin >> N >> M;
    for(i=0; i<N; ++i) {
        fin >> a[i];
        m[0][i] = a[i];
    }
    for(i=2; i<=N; ++i) {
        log[i] = log[i/2] + 1;
    }
    for(p=1; (1<<p) <= N; ++p) {
        for(i=0; i<=N-(1<<p); ++i) {
            m[p][i] = min(m[p-1][i], m[p-1][i+(1<<(p-1))]);
            //cout << i << '\t' << i+(1<<p)-1 << '\t' << m[p][i] << '\n';
        }
    }

    for(i=0; i<M; ++i) {
        fin >> l >> r;
        --l, --r;
        fout << min(m[log[r-l+1]][l], m[log[r-l+1]][r-log[r-l+1]]) << '\n';
    }
}