Cod sursa(job #3177724)

Utilizator TheEpicWipedCreaVlad Chirita Alexandru TheEpicWipedCrea Data 29 noiembrie 2023 20:31:31
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.69 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in  ("rmq.in");
ofstream out("rmq.out");

#define maxN 100000
#define LOG 18

int rmq[LOG][maxN+1];
int logs[maxN+1];

int main(){
    int n,q;
    in>>n>>q;
    for(int i=1;i<=n;i++){
        in>>rmq[0][i];
    }

    logs[1]=0;
    for(int i=2;i<=maxN;i++){
        logs[i]=logs[i/2]+1;
    }

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

    for(int z=1;z<=q;z++){
        int x,y;
        in>>x>>y;
        
        out<<min(rmq[logs[y-x+1]][x], rmq[logs[y-x+1]] [y - (1<<logs[y-x+1]) + 1])<<'\n';
    }
}