Cod sursa(job #3296598)

Utilizator Darius_PurcaruPurcaru Darius Constantin Darius_Purcaru Data 14 mai 2025 15:09:57
Problema Range minimum query Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.82 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cmath>

using namespace std;
const int N = 100005;

int RMQ[N][20], v[1000];

void build_rmq(int n) {
  for (int i = 0; i < n; ++i) {
    RMQ[i][0] = v[i];
  }
  for (int j = 1; (1 << j) <= n; ++j) {
    int k = 1 << j;
    for (int i = 0; i <= n - k; ++i) {
      RMQ[i][j] = min(RMQ[i][j - 1], RMQ[i + (1 << (j - 1))][j - 1]);
    }
  }
}

int query(int i, int j) {
  int k = log2(j - i + 1);
  return min(RMQ[i][k], RMQ[j - (1 << k) + 1][k]);
}

ifstream f("rmq.in");
ofstream g("rmq.out");

int main() {
  int n, q;
  f >> n >> q;
  for (int i = 0; i < n; ++i) {
    f >> v[i];
  }
  build_rmq(n);
  for (int i = 0; i < q; ++i) {
    int x, y;
    f >> x >> y;
    --x, --y;
    g << query(x, y) << '\n';
  }
  return 0;
}