Cod sursa(job #3312738)

Utilizator depevladVlad Dumitru-Popescu depevlad Data 29 septembrie 2025 18:37:42
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.87 kb
#include <bits/stdc++.h>

using namespace std;

int main() {
#ifndef LOCAL
  freopen("rmq.in", "r", stdin);
  freopen("rmq.out", "w", stdout);
#endif
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  int N;
  int M;
  cin >> N >> M;
  vector<int> arr(N);
  for (int i = 0; i < N; ++i) {
    cin >> arr[i];
  }
  vector<int> lg(N + 1);
  lg[1] = 0;
  for (int i = 2; i <= N; ++i) {
    lg[i] = lg[i >> 1] + 1;
  }
  vector<vector<int>> rmq(lg[N] + 1, vector<int>(N));
  for (int i = 0; i < N; ++i) {
    rmq[0][i] = arr[i];
  }
  for (int b = 1; b <= lg[N]; ++b) {
    for (int i = 0; i < N - (1 << b) + 1; ++i) {
      rmq[b][i] = min(rmq[b - 1][i], rmq[b - 1][i + (1 << (b - 1))]);
    }
  }
  for (; M--;) {
    int X;
    int Y;
    cin >> X >> Y;
    --X;
    --Y;
    int Z = Y - X + 1;
    cout << min(rmq[lg[Z]][X], rmq[lg[Z]][Y - (1 << lg[Z]) + 1]) << "\n";
  }
  return 0;
}