26 v = vector<T>(2 * size, T::id());
27 lz = vector<L>(size, L::id());
28 for (
int i = 0; i < n; i++) {
31 for (
int i = size - 1; i >= 1; i--) {
63 assert(0 <= l && r <= n);
68 int llen = 0, rlen = 0;
69 T sml = T::id(), smr = T::id();
70 int i = 1, l2 = l, r2 = r;
71 for (; l < r; i++, l >>= 1, r >>= 1) {
73 sml = sml.merge(v[l++]), llen += 1 << (i - 1);
76 smr = v[--r].merge(smr), rlen += 1 << (i - 1);
78 if (((l2 >> i) << i) != l2) {
79 sml = lz[l2 >> i].apply(sml, llen);
81 if (((r2 >> i) << i) != r2) {
82 smr = lz[(r2 - 1) >> i].apply(smr, rlen);
85 for (; i <= log; i++) {
86 if (((l2 >> i) << i) != l2) {
87 sml = lz[l2 >> i].apply(sml, llen);
89 if (((r2 >> i) << i) != r2) {
90 smr = lz[(r2 - 1) >> i].apply(smr, rlen);
93 return sml.merge(smr);