/tmp/solutions/build/staticrmq-main.cpp:
    1|       |#include <common.h>
    2|       |#include <toy/bit.h>
    3|       |prelude;
    4|       |
    5|      1|int main() {
    6|      1|  rd rd;
    7|      1|  wt wt;
    8|      1|  int n = rd.uh();
    9|      1|  int q = rd.uh();
   10|      1|  int m = n / 16 + 1;
   11|      1|  int len = log(m) + 1;
   12|      1|  int table[len][m];
   13|      1|  int val[n];
   14|      1|  int suf[n];
   15|      1|  int pre[n];
   16|      9|  for (int min, i = 0; i < n; ++i) {
                                            ^8
  ------------------
  |  Branch (16:24): [True: 88.89%, False: 11.11%]
  ------------------
   17|      8|    int id = i & 15;
   18|      8|    int value = pre[i] = val[i] = rd.uw();
   19|      8|    suf[i] = min = id ? std::min(min, value) : value;
                                      ^7                     ^1
  ------------------
  |  Branch (19:20): [True: 87.50%, False: 12.50%]
  ------------------
   20|      8|    if (id == 15) table[0][i / 16] = suf[i];
                                ^0
  ------------------
  |  Branch (20:9): [True: 0.00%, False: 100.00%]
  ------------------
   21|      8|  }
   22|      8|  for (int min, i = n - 2; i >= 0; --i) {
                                                 ^7
  ------------------
  |  Branch (22:28): [True: 87.50%, False: 12.50%]
  ------------------
   23|      7|    int id = ~i & 15;
   24|      7|    int value = pre[i];
   25|      7|    pre[i] = min = id ? std::min(min, value) : value;
                                                             ^0
  ------------------
  |  Branch (25:20): [True: 100.00%, False: 0.00%]
  ------------------
   26|      7|  }
   27|      1|  for (int i = 1; i < len; ++i) {
                                         ^0
  ------------------
  |  Branch (27:19): [True: 0.00%, False: 100.00%]
  ------------------
   28|      0|    for (int j = 0, k = 1 << (i - 1); k < m; ++j, ++k) {
  ------------------
  |  Branch (28:39): [True: 0.00%, False: 0.00%]
  ------------------
   29|      0|      table[i][j] = std::min(table[i - 1][j], table[i - 1][k]);
   30|      0|    }
   31|      0|  }
   32|  1.00k|  while (q--) {
  ------------------
  |  Branch (32:10): [True: 99.90%, False: 0.10%]
  ------------------
   33|  1.00k|    int l = rd.uh();
   34|  1.00k|    int r = rd.uh() - 1;
   35|  1.00k|    int L = l / 16;
   36|  1.00k|    int R = r / 16;
   37|  1.00k|    int ans;
   38|  1.00k|    if (L == R) {
  ------------------
  |  Branch (38:9): [True: 100.00%, False: 0.00%]
  ------------------
   39|  1.00k|      ans = val[l];
   40|  3.41k|      for (int i = l + 1; i <= r; ++i) ans = std::min(ans, val[i]);
                                                ^2.41k^2.41k
  ------------------
  |  Branch (40:27): [True: 70.69%, False: 29.31%]
  ------------------
   41|  1.00k|    } else if (L == R - 1) {
                         ^0  ^0
  ------------------
  |  Branch (41:16): [True: 0.00%, False: 0.00%]
  ------------------
   42|      0|      int p = pre[l];
   43|      0|      int s = suf[r];
   44|      0|      ans = std::min(p, s);
   45|      0|    } else {
   46|      0|      int p = pre[l];
   47|      0|      int s = suf[r];
   48|      0|      int k = log(R - L - 1);
   49|      0|      int a = table[k][L + 1];
   50|      0|      int b = table[k][R - (1 << k)];
   51|      0|      ans = std::min({p, s, a, b});
   52|      0|    }
   53|  1.00k|    wt.ud(ans);
   54|  1.00k|  }
   55|      1|  return 0;
   56|      1|}