Cod sursa(job #3223281)

Utilizator Tudor.1234Holota Tudor Matei Tudor.1234 Data 12 aprilie 2024 21:47:15
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include "bits/stdc++.h"

const int DIM = 100004;
const int LOG  = 17;
int v[DIM],rmq[LOG][DIM];
int n,q;

inline static void RMQ_RMQ_RMQ(){
int log = std::log2(n);
        for(int i = 1; i < log+1; i++){
             for(int j = 0; j+(1 << i) <= n; j++){
                   rmq[i][j] = std::min(rmq[i-1][j],rmq[i-1][j+(1 << (i-1))]);
             }
        }
}

inline static int query(int st, int dr){
        int i = std::log2(dr-st+1);
        return std::min(rmq[i][st],rmq[i][dr-(1<<i) + 1]);
}

inline static void solve(){
      std::cin >> n  >> q;

      for(int i = 0; i < n; i++){
          std::cin >> v[i];
          rmq[0][i] = v[i];
      }
       RMQ_RMQ_RMQ();
      while(q--){
      int st,dr;
      std::cin >> st >> dr;
            std::cout << query(st-1,dr-1) << '\n';
      }
}

signed main(){
     freopen("rmq.in","r",stdin);
     freopen("rmq.out","w",stdout);
     std::ios_base::sync_with_stdio(false);
     std::cin.tie(0);
     std::cout.tie(0);
      solve();
     return  0;
}