专栏文章

题解:AT_agc069_a [AGC069A] Schedule Optimization

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

文章操作

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

当前评论
0 条
当前快照
1 份
快照标识符
@minap9da
此快照首次捕获于
2025/12/01 23:19
3 个月前
此快照最后确认于
2025/12/01 23:19
3 个月前
查看原文
有迹可循的好题。
考虑把操作树建出来,假设我不能操作怎么判断合法性。
对于一个非叶子节点,设左右儿子比赛出来的合法区间是 [l1,r1][l_1,r_1][l2,r2][l_2,r_2],那么两区间不交就无解,否则比赛后的合法区间为 [max(l1,l2),max(r1,r2)][\max(l_1,l_2),\max(r_1,r_2)]
一个很好的想法叫做只操作左端点,也就是当合并时发现 l1r1<l2r2l_1\leq r_1<l_2\leq r_2 时,把 l2r1l_2\gets r_1,因为左端点越小越好。但是这样是不对的,你不能一边合并一边做操作。
由于 左端点越小越好 和 合并时取 max\max 的矛盾,我们先不考虑左端点的操作,考虑只能对右端点做操作会发生什么。
一个点合并后的右端点就是子树内右端点最大值。证明很简单,你右移 r1r_1 不会让 max(r1,r2)\max(r_1,r_2) 变大。
所以我们考虑在叶子把左端点做好,在合并过程只考虑右端点即可。考虑 dp,设 fx,if_{x,i} 表示合并之后 lil\leq i 的最小代价。转移有
fx,i=min(fx,i1,flson,i+frson,i+min(imin(r1,r2),0)).f_{x,i}=\min(f_{x,i-1},f_{\text{lson},i}+f_{\text{rson},i}+\min(i-\min(r_1,r_2),0)).
对于叶子节点 xx
fx,i=min(li,0).f_{x,i}=\min(l-i,0).
容易发现 fx,f_{x,*} 是凸的,维护凸包折点即可。时间复杂度 O(2n×n)O(2^n\times n)

评论

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

正在加载评论...