首先,根据$ a_{i} + k_{i} \leq a_{i+1} $和$ a_{i+1} + k_{i+1} \leq a_{i+2} $有$ a_{i} \leq a_{i+1} - k_{i} \leq a_{i+2} - k_{i} - k_{i+1} $,依据此规律可以构造一个array $b$,其中$ b_1 = a_1, \space b_{i} = a_{i} - \sum_{j=1}^{i-1} k_{j} $
那么问题就变得简单了。
对array $b$,用线段树进行维护。
对于操作1,二分找到最后一个值小于$ b_{i} + x $的元素$ b_{j} $,将$ b_{i}, b_{i+1}, …, b{j} $修改为$ b_{i} + x $。
对于操作2,答案即为$ \sum_{i=l}^{r} \sum_{j=1}^{i-1} k_{j} + \sum_{i=l}^{r} b_{i}$。
Code:
1 |
|