Cod sursa(job #2360596)

Utilizator SemetgTemes George Semetg Data 1 martie 2019 22:49:11
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.66 kb
#include <fstream>
#include <cmath>
using namespace std;

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

const int N_MAX = 100005;
const int LOG2_MAX = 18;

int N;
int RMQ[N_MAX][LOG2_MAX];

int main() {
    int m;
    in >> N >> m;
    for (int i = 1; i <= N; ++i)
        in >> RMQ[i][0];
    
    for (int j = 1; 1 << j <= N; ++j)
        for (int i = 1; i + (1 << j) - 1 <= N; ++i)
            RMQ[i][j] = min(RMQ[i][j - 1], RMQ[i + (1 << (j - 1))][j - 1]);
    
    while (m--) {
        int x, y;
        in >> x >> y;
        
        int d = y - x + 1;
        int ld = log2(d);
        
        out << min(RMQ[x][ld], RMQ[y - (1 << ld) + 1][ld]) << '\n';
    }
}