Cod sursa(job #2890183)

Utilizator stefanmaxStefan Maximilian stefanmax Data 14 aprilie 2022 19:42:12
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.75 kb
#include <bits/stdc++.h>

using namespace std;

int a[17][1000001], LOG2[100001];

int main() {

  ifstream fin ("rmq.in");
  ofstream fout ("rmq.out");
  std::ios_base::sync_with_stdio(0);
  fin.tie(0);
  int n, m, x;
  fin >> n >> m;
  for(int i = 0; i < n; ++i) {
    fin >> x;
    a[0][i] = x;
  }
  for(int i = 1; (1 << i) <= n; ++i) {
    for(int j = 0; j <= n - (1 << i); ++j)
      a[i][j] = min(a[i - 1][j], a[i - 1][j + (1 << (i - 1))]);
  }
  for(int i = 2; i <= n; ++i) {
    LOG2[i] = LOG2[i / 2] + 1;
  }
  int a1, b1;
  for(int i = 1; i <= m; ++i) {
    fin >> a1 >> b1;
    a1--;
    b1--;
    int lin = LOG2[b1 - a1 + 1];
    x = b1 - (1 << lin) + 1;
    fout << min(a[lin][a1], a[lin][x]) << '\n';
  }
  return 0;
}