Cod sursa(job #3309296)

Utilizator rrfeierFeier Raul rrfeier Data 3 septembrie 2025 14:20:20
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.67 kb
#include <bits/stdc++.h>

using namespace std;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);

  ifstream cin{"rmq.in"};
  ofstream cout{"rmq.out"};

  int N, Q;
  cin >> N >> Q;

  int rmq[100005][17];
  for (int i = 1; i <= N; i++) {
    int a;
    cin >> a;

    rmq[i][0] = a;
  }

  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 len = (b - a + 1);
    int eep = 31 - __builtin_clz(len);
    cout << min(rmq[a][eep], rmq[b - (1 << eep) + 1][eep]) << '\n';
  }

  return 0;
}