@@ -30,12 +30,12 @@ template <class S, S (*op)(S, S), S (*e)()> struct segtree {
3030 for (int i = 1 ; i <= log; i++) update (p >> i);
3131 }
3232
33- S get (int p) {
33+ S get (int p) const {
3434 assert (0 <= p && p < _n);
3535 return d[p + size];
3636 }
3737
38- S prod (int l, int r) {
38+ S prod (int l, int r) const {
3939 assert (0 <= l && l <= r && r <= _n);
4040 S sml = e (), smr = e ();
4141 l += size;
@@ -50,12 +50,12 @@ template <class S, S (*op)(S, S), S (*e)()> struct segtree {
5050 return op (sml, smr);
5151 }
5252
53- S all_prod () { return d[1 ]; }
53+ S all_prod () const { return d[1 ]; }
5454
55- template <bool (*f)(S)> int max_right (int l) {
55+ template <bool (*f)(S)> int max_right (int l) const {
5656 return max_right (l, [](S x) { return f (x); });
5757 }
58- template <class F > int max_right (int l, F f) {
58+ template <class F > int max_right (int l, F f) const {
5959 assert (0 <= l && l <= _n);
6060 assert (f (e ()));
6161 if (l == _n) return _n;
@@ -79,10 +79,10 @@ template <class S, S (*op)(S, S), S (*e)()> struct segtree {
7979 return _n;
8080 }
8181
82- template <bool (*f)(S)> int min_left (int r) {
82+ template <bool (*f)(S)> int min_left (int r) const {
8383 return min_left (r, [](S x) { return f (x); });
8484 }
85- template <class F > int min_left (int r, F f) {
85+ template <class F > int min_left (int r, F f) const {
8686 assert (0 <= r && r <= _n);
8787 assert (f (e ()));
8888 if (r == 0 ) return 0 ;
0 commit comments