Cod sursa(job #2675205)

Utilizator Iustin01Isciuc Iustin - Constantin Iustin01 Data 21 noiembrie 2020 11:13:32
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.71 kb
#include <bits/stdc++.h>
#define MAX 100005
using namespace std;

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

int n, m;

int rmq[20][MAX], lg[MAX];


int main(){
    in>>n>>m;
    for(int j = 1; j <= n; j++)
        in>>rmq[0][j];

    for(int i = 2; i <= n; i++)
        lg[i] = lg[i / 2] + 1;

    for(int i = 1; (1 << i) <= n; i++)
    for(int j = 1; j <= n - (1 << i) + 1; j++){
        int k = (1 << (i - 1));
        rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + k]);
    }

    while(m--){
        int x, y, dif, k, lin;
        in>>x>>y;
        dif = y - x + 1;
        lin = lg[dif];
        k = dif - (1 << lin);
        out<<min(rmq[lin][x], rmq[lin][x + k])<<"\n";
    }
}