Cod sursa(job #2884265)

Utilizator dorufDoru Floare doruf Data 2 aprilie 2022 19:29:45
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;

ifstream fin("rmq.in");
ofstream fout("rmq.out");

const int N = 1e5 + 5;
int rmq[25][N], a[N], n, q, x, y;
int lg[N];
int main() {
  fin >> n >> q;
  for (int i = 1; i <= n; ++i) fin >> a[i];
  for (int i = 2; i <= n; ++i) lg[i] = 1 + lg[i / 2];
  for (int i = 1; i <= n; ++i) rmq[0][i] = a[i];
  for (int i = 1; i <= lg[n] + 1; ++i)
    for (int j = 1; j + (1 << (i - 1)) <= n; ++j)
      rmq[i][j] = min(rmq[i - 1][j], rmq[i - 1][j + (1 << (i - 1))]);
  while (q--) {
    fin >> x >> y;
    if (y < x) swap(x, y);
    int k = lg[y - x + 1];
    fout << min(rmq[k][x],rmq[k][y - (1 << k) + 1]) << '\n';
  }
}