整体二分.
- $solve(l,r,L,R)$ 表示当前处理编号在 $L\sim R$ 内的询问与修改操作,询问的答案在 $l\sim r$ 内.
- 每次处理时,若当前 $l=r$ ,就回答 $L\sim R$ 内的询问.
- 否则,二分答案 $mid$ ,对于编号在 $L\sim R$ 内的修改操作,按照修改的权值分成 $\le mid,>mid$ 两边,若 $\le mid$ ,就在树状数组里将它对应的位置 $+1$ .
- 对于编号在 $L\sim R$ 内的询问操作,按照在树状数组中询问区间的权值和 $sum\le k,>k$ 分成两边,若 $<k$ ,就将 $k$ 减去这个 $sum$ .
- 然后将分出的修改与询问操作分到左右两边,递归解决即可.
1 |
|