Advertisement
tiom4eg

abstract sparse

Aug 15th, 2022
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.69 KB | None | 0 0
  1. template <int F(int, int)>
  2. struct SparseTable {
  3.     int n, h;
  4.     mi t;
  5.     SparseTable(vi& a) {
  6.         n = sz(a), h = __lg(n) + 1;
  7.         t = mi(h, vi(n + 1));
  8.         FOR(i, 0, n) t[0][i] = a[i];
  9.         FOR(l, 0, h - 1) FOR(i, 0, n - (2 << l) + 1) t[l + 1][i] = F(t[l][i], t[l][i + (1 << l)]);
  10.     }
  11.     int get(int l, int r) {
  12.         int k = __lg(r - l);
  13.         return F(t[k][l], t[k][r - (1 << k)]);
  14.     }
  15. };
  16.  
  17. // initialize your own functions here because c++ dumb af
  18. int _min(int a, int b) { return a < b ? a : b; }
  19. int _max(int a, int b) { return a > b ? a : b; }
  20.  
  21. // example
  22. signed main() {
  23.     vi a = {1, 2, 3, 4};
  24.     SparseTable <_min> tmin(a);
  25.     SparseTable <_max> tmax(a);
  26. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement