Cod sursa(job #2449665)

Utilizator ejoi2019Ejoi 2019 ejoi2019 Data 20 august 2019 13:54:47
Problema Range minimum query Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.76 kb
#include <cstdio>
#include <algorithm>

using namespace std;

const int N = 100001;
const int K = 17;
int rmq[K][N];
int kkk[N];

int get(int l, int r) {
  int k = kkk[r - l + 1];
  return min(rmq[k][l], rmq[k][r - (1 << k) + 1]);
}

int main() {
  freopen ("rmq.in", "r", stdin);
  freopen ("rmq.out", "w", stdout);

  int n, q;
  scanf("%d %d", &n, &q);
  for (int i = 1; i <= n; i++)
    scanf("%d", &rmq[0][i]);
  for (int i = 2; i <= n; i++)
    kkk[i] = 1 + kkk[i / 2];
  for (int k = 1; (1 << k) <= n; k++)
    for (int i = 1; i + (1 << k) - 1 <= n; i++)
      rmq[k][i] = min(rmq[k - 1][i], rmq[k - 1][i + (1 << (k - 1))]);
  while (q--) {
    int l, r;
    scanf("%d %d", &l, &r);
    printf("%d\n", get(l, r));
  }
  return 0;
}