p10538 sol
我的二分队列决策单调性启蒙题。设
拿一个 dp 算答案。设计 dp 状态
其中
预处理
仔细一看发现这个 dp 满足四边形不等式,那么就有决策单调性了。考虑二分队列。
首先,先按照
依次令
由于有星球的限制,所以对每个星球开一个 deque 叫做
考虑向
- 首先,记队尾三元组为
(x',l',r') 。若Val_{rf_{i,l'},x'}>Val_{rf_{i,l'},x} 那么意味着x 比x' 在rf_{i,l}\sim rf_{i,r} 上更优,直接删掉三元组继续下一次判断; - 否则,二分出一个
mid 满足Val_{rf_{i,mid},x'}>Val_{rf_{i,mid},x},Val_{rf_{i,mid-1},x'}\le Val_{rf_{i,mid-1},x} ,修改队尾三元组(x',l',r') 至(x',l',mid-1) ,新增三元组(x,mid,cs_i-1) ; - 若某时刻队中不存在元素,直接新增三元组
(x,0,cs_i-1) 。
记如上操作为
再考虑计算一条边
- 首先,记
dq_{X_i} 队头三元组为(x,l,r) 。若r<id_i 则说明x 不在i 上最优,直接删掉三元组继续下一次判断; - 否则直接令
f_i=Val(i,x) ; - 若某时刻
dq_{X_i} 中不存在元素,直接设置f_i=+\infty 。
记如上操作为
每个星球维护一个小根堆
- 若
pq_{X_{e_i}} 队头x 满足B_x\le A_{e_i} 则执行add(X_{e_i},x) 并删除队头继续判断; - 否则执行
ask(e_i) ; - 接下来在
pq_{Y_{e_i}} 中插入e_i 。
时间复杂度