Cod sursa(job #2836261)

Utilizator Vlad_NistorNIstor Vlad Vlad_Nistor Data 19 ianuarie 2022 23:39:35
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.73 kb
#include <bits/stdc++.h>
using namespace std;
int e[100010], a[17][100010];
int n,q, len;

int main(void){
    ofstream cout("rmq.out");
    ifstream cin("rmq.in");
    cin >> n >> q;
    for(int i =1;i<=n;i++){
        cin >> a[0][i];
    }
    for(int p = 1;(1<<p)<=n;p++){
        for(int i = 1;i<=n;i++){
            a[p][i] = a[p-1][i];
            int j = i + (1<<(p-1));
            if(j <= n && a[p][i] > a[p-1][j])
                a[p][i] = a[p-1][j];
        }
    }
    for(int i = 2;i<=n;i++){
        e[i] = 1+e[i/2];
    }
    for(int i =0;i<q;i++){
        int x,y;
        cin >> x >> y;
        int ex = e[y-x+1];
        len = 1<<ex;
        cout <<  min(a[ex][x], a[ex][y-len+1]) << "\n";
    }
}