Cod sursa(job #3242814)

Utilizator rrfeierFeier Raul rrfeier Data 14 septembrie 2024 10:38:34
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <bits/stdc++.h>

using namespace std;

const int max_N = 200005;
int t[max_N + 5];
int N;

void build() {
  int start = N / 2;
  int end = N;

  while (start > 0) {
    for (int i = start - 1; i < end; i++) {
      t[i] = min(t[i * 2], t[i * 2 + 1]);
    }

    start /= 2;
    end /= 2;
  }
}

int query(int l, int r) {
  l += N - 1;
  r += N - 1;

  int res = 1e9;
  while (l <= r) {
    if (l % 2 == 1) {
      res = min(res, t[l]);
      l++;
    }

    if (r % 2 == 0) {
      res = min(res, t[r]);
      r--;
    }

    l /= 2;
    r /= 2;
  }

  return res;
}

int main() {
  ifstream cin("rmq.in");
  ofstream cout("rmq.out");

  int Q;
  cin >> N >> Q;

  for (int i = 0; i < N; i++) {
    cin >> t[i + N];
  }

  build();

  while (Q--) {
    int l, r;
    cin >> l >> r;

    cout << query(l, r) << '\n';
  }

  return 0;
}