Cod sursa(job #2475876)

Utilizator greelioGreenio Greely greelio Data 17 octombrie 2019 18:28:12
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include<bits/stdc++.h>
#define N 100010
using namespace std;

int n,q, a[N];
int RMQ[N][30];
int LOG[N];

int main() {
    ifstream cin("rmq.in");
    ofstream cout("rmq.out");
    cin>>n>>q;
    for (int i=1; i<=n; i++) cin>>a[i], RMQ[i][0]=a[i];
    for (int i=2; i<=n; i++) LOG[i] = LOG[i/2]+1;
    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 (q--) {
        int a,b; cin>>a>>b;
        int l = b-a+1;
        int lg=LOG[b-a+1];
        int rs=min(RMQ[a][lg], RMQ[b-(1<<lg)+1][lg]);
        cout<<rs<<'\n';
    }


    return 0;
}