专栏文章

p10538 sol

题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@miqjqgcq
此快照首次捕获于
2025/12/04 05:55
3 个月前
此快照最后确认于
2025/12/04 05:55
3 个月前
查看原文
我的二分队列决策单调性启蒙题。设 N,M,WN,M,W 同阶。
拿一个 dp 算答案。设计 dp 状态 fif_i 表示经过第 ii 条边,当前时刻是 BiB_i 的答案。按照 AiA_i 从小到大转移。容易列出转移式
  • fi=minYj=Xi,BjAi(ci+fj+TXi×CostBj+1,Ai1)f_i=\min_{Y_j=X_i,B_j\le A_i}(c_i+f_j+T_{X_i}\times Cost_{B_j+1,A_i-1})
其中 Costl,rCost_{l,r} 表示左端点大于等于 ll,右端点小于等于 rr 的饭的数量。这可以拿主席树搞掉。
预处理 CostCost 时间复杂度 O(N2)O(N^2),主席树是 O(N2logN)O(N^2\log N)。前者没前途。
仔细一看发现这个 dp 满足四边形不等式,那么就有决策单调性了。考虑二分队列。
首先,先按照 AiA_i 对每条边排序,记排序后的边数组为 ee。依次将 eie_i 标号称作 idiid_i
依次令 idicsXei,rfXei,idiei,csXeicsXei+1id_i\larr cs_{X_{e_i}},rf_{X_{e_i},id_i}\larr e_i,cs_{X_{e_i}}\larr cs_{X_{e_i}}+1。记 Vali,j=ci+fj+TXi×CostBj+1,Ai1Val_{i,j}=c_i+f_j+T_{X_i}\times Cost_{B_j+1,A_i-1}
由于有星球的限制,所以对每个星球开一个 deque 叫做 dqidq_idqidq_i 的每一个元素都是一个三元组 (x,l,r)(x,l,r) 满足 xxrfi,lrfi,rrf_{i,l}\sim rf_{i,r} 做决策。
考虑向 dqidq_i 中插入一个 xx
  • 首先,记队尾三元组为 (x,l,r)(x',l',r')。若 Valrfi,l,x>Valrfi,l,xVal_{rf_{i,l'},x'}>Val_{rf_{i,l'},x} 那么意味着 xxxx'rfi,lrfi,rrf_{i,l}\sim rf_{i,r} 上更优,直接删掉三元组继续下一次判断;
  • 否则,二分出一个 midmid 满足 Valrfi,mid,x>Valrfi,mid,x,Valrfi,mid1,xValrfi,mid1,xVal_{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',r')(x,l,mid1)(x',l',mid-1),新增三元组 (x,mid,csi1)(x,mid,cs_i-1)
  • 若某时刻队中不存在元素,直接新增三元组 (x,0,csi1)(x,0,cs_i-1)
记如上操作为 add(i,x)add(i,x)
再考虑计算一条边 ii 的答案:
  • 首先,记 dqXidq_{X_i} 队头三元组为 (x,l,r)(x,l,r)。若 r<idir<id_i 则说明 xx 不在 ii 上最优,直接删掉三元组继续下一次判断;
  • 否则直接令 fi=Val(i,x)f_i=Val(i,x)
  • 若某时刻 dqXidq_{X_i} 中不存在元素,直接设置 fi=+f_i=+\infty
记如上操作为 ask(i)ask(i)
每个星球维护一个小根堆 pqipq_i,按照 BjB_j 从小到大排序。在按 eie_i 顺序转移时按如下方式执行操作:
  • pqXeipq_{X_{e_i}} 队头 xx 满足 BxAeiB_x\le A_{e_i} 则执行 add(Xei,x)add(X_{e_i},x) 并删除队头继续判断;
  • 否则执行 ask(ei)ask(e_i)
  • 接下来在 pqYeipq_{Y_{e_i}} 中插入 eie_i
时间复杂度 O(Nlog2N)O(N\log^2N)

评论

0 条评论,欢迎与作者交流。

正在加载评论...