Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- template <int F(int, int)>
- struct SparseTable {
- int n, h;
- mi t;
- SparseTable(vi& a) {
- n = sz(a), h = __lg(n) + 1;
- t = mi(h, vi(n + 1));
- FOR(i, 0, n) t[0][i] = a[i];
- 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)]);
- }
- int get(int l, int r) {
- int k = __lg(r - l);
- return F(t[k][l], t[k][r - (1 << k)]);
- }
- };
- // initialize your own functions here because c++ dumb af
- int _min(int a, int b) { return a < b ? a : b; }
- int _max(int a, int b) { return a > b ? a : b; }
- // example
- signed main() {
- vi a = {1, 2, 3, 4};
- SparseTable <_min> tmin(a);
- SparseTable <_max> tmax(a);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement