Cod sursa(job #2959528)

Utilizator StefannnnnStefan Stefannnnn Data 31 decembrie 2022 17:18:48
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <iostream>
#include <vector>
#define nmax int32_t(1e5 + 5)
//#define int long long
using namespace std;
//ifstream cin("rmq.in");
//ofstream cout("rmq.out");
int v[100001], rmq[100001][32];
int build(int l, int r){
    int n = l-r+1;
    int pow=1;
    while(1<<(pow+1) <= n)
        pow ++;
    return min(rmq[l][pow], rmq[r-(1<<pow)+1][pow]);
}
int main() {
    int n;
    cin>>n;
    int q;
    cin>>q;
    for(int i=0; i<n; i++){
        cin>>v[i];
        rmq[i][0] = v[i];
    }
    for(int j=1; (1<<j) < n; j++){
        for(int i=0; i+(1<<j)-1<n; i++)
            rmq[i][j] = min(rmq[i][j-1], rmq[i+(1<<(j-1))][j-1]);
    }
    for(int i=0; i<q; i++){
        int l, r;
        cin>>l>>r;
        l--;
        r--;
        cout<<build(l, r)<<endl;
    }
}