Cod sursa(job #2546997)

Utilizator AlexNeaguAlexandru AlexNeagu Data 14 februarie 2020 19:56:58
Problema Range minimum query Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.78 kb
#include <bits/stdc++.h>
using namespace std;
const int N = 100005;
int a[N], dp[25][N], lg[N];
ifstream in("rmq.in");
ofstream out("rmq.out");
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  int n, m;
  in >> n >> m;
  lg[1] = 0;
  for (int i = 2; i <= N - 5; i++) {
    lg[i] = lg[i] / 2 + 1;
  }
  for (int i = 1; i <= n; i++) {
    in >> a[i];
  }
  for (int i = 1; i <= n; i++) {
    dp[0][i] = a[i];
  }
  for (int i = 1; (1 << i) <= n; i++) {
    for (int j = 1; j <= n - (1 << i) + 1; j++) {
      dp[i][j] = min(dp[i - 1][j], dp[i - 1][j + (1 << (i - 1))]);
    }
  }
  while(m--) {
    int a, b;
    in >> a >> b;
    int len = b - a + 1;
    len = lg[len];
    out << min(dp[len][a], dp[len][a + b - (1 << len)]) << "\n";
  }
  return 0;
}