做题记录 25.8.26

\(\textcolor{purple}\odot\) LOJ #4261. 「KTSC 2024 R2」跳跃游戏 \(\quad\) P11239 [KTSC 2024 R2] 跳跃游戏

显然可以转化为 \(a_{0\sim n-1}\) 中选择若干个数满足任意两个选择的位置之间距离不小于 \(k\),最大化选出的数的和

\(f_i\) 表示 \(a_{0\sim i}\) 的答案,则转移为 \(f_i=\max f_{0\sim i-k}+a_i\)

考虑每次处理一段,从 \(f_{uk-k}\sim f_{uk-1}\) 转移到 \(f_{uk}\sim f_{uk+k-1}\),令 \(pmx\)\(f_{0\sim uk-k-1}\) 中的最大值

初始 \(pmx=0\)\(u=0\),令 \(p_i=f_{uk-k+i}\)\(c_i=f_{uk+i}\)\(a_i\) 为原本的 \(a_{uk+i}\),则 \(p_{0\sim k-1}\gets -\infty\)

则转移为

\[c_i=\max(pmx,p_{0\sim i})+a_i \]

假定 \(p_{-1}=pmx\) 则化为

\[c_i=\max(p_{-1\sim i})+a_i \]

考虑当前范围中存在一次 \(a\) 区间加的左端点 \(l\),下一个左端点为 \(l_2\),则可证 \(a_{l\sim l_2-1}\) 中只需要保存 \(a_l\)(若 \(l=l_2\) 则忽略,即去重左端点)

扫描一遍当前区间内的端点得到 \(a\) 极长等值段,从而将 \(+a_i\) 转化为若干区间加,在所有区间加之前更新 \(c_i=\max (p_{-1\sim i})\),以上操作容易线段树维护

这样时间复杂度为 \(O(q\log q+\frac nk)\)

若存在连续若干段中的 \(a\) 都相同,则可以转化为 \(p_{-1}\)\(p_{0\sim k-1}\) 的修改

这样时间复杂度为 \(O(q\log q)\)

LOJ \(\quad\) luogu

参考

\(\textcolor{purple}\odot\) LOJ #4257. 「KTSC 2024 R1」水果游戏 \(\quad\) P11236 [KTSC 2024 R1] 水果游戏

考虑对于一个确定的序列 \(a_{1\sim n}\) 如何求解

\(a\) 中极长等值区间缩为一个二元组 \((v,c)\) 表示有 \(c\)\(v\)

考虑连续三个 \((v_1,c_1),(v_2,c_2),(v_3,c_3)\),满足 \(v_1>v_2<v_3\),则 \(v_1\)\(v_3\) 要并起来 \(v_2\) 必须和并至 \(\min(v_1,v_3)\)

\(d=\min(v_1,v_3)-v_2\),则 \(2^d\)\(v_2\) 可以合并出一个 \(\min(v_1,v_3)\)

\(2^d\mid c_2\) 则直接将 \((v_2,c_2)\) 替换为 \(\left(\min(v_1,v_3),\frac{c_2}{2^d}\right)\)

否则 \(v_1\)\(v_3\) 无法合并,将序列从 \((v_2,c_2)\) 处断开,左右分别放回一个 \(\left(\min(v_1,v_3),\left\lfloor\frac{c_2}{2^d}\right\rfloor\right)\)

经过若干次以上操作,剩下的每一段都是严格单峰的,长度为 \(O(V)\)(令 \(V=\max a=10\)

\((+\infty,\ge 1)\) 表示断点,起点,终点,继续消去谷,同时在消去 \((v_2,c_2)\) 时将 \(v_2+\left\lfloor\log_2 c_2\right\rfloor\) 计入答案,则最终得到一个 \((+\infty,\ge 1)\) 且在合并过程中得到答案

用线段树维护每个区间内的二元组序列,则时间复杂度为 \(O(Vn\log n)\),空间复杂度 \(O(Vn)\)

LOJ \(\quad\) luogu

参考

\(\textcolor{blue}\odot\) P3554 [POI 2013] LUK-Triumphal arch

显然回到父亲不优

二分答案,转化为判定取 \(k\) 时是否满足要求

\(f_u\) 表示 \(u\) 已经染黑的情况下,在进入子树 \(u\) 之前最少需要染黑的点的数量,使得进入子树 \(u\) 后合法

显然转移为 \(f_u=\max(0,\sum_{v\in son(u)}(f_v+1)-k)\)

\(f_1=0\) 则当前 \(k\) 合法

时间复杂度 \(O(n\log n)\)

代码

\(\textcolor{blue}\odot\) CF1559D2 Mocha and Diana (Hard Version)

显然答案的上限为 \(A\)\(B\) 中连通块数量的较小值减一,以下通过构造证明能取道这一上界

先枚举 \(2\le i\le n\),若 \(A\)\(B\)\(1\)\(i\) 都不连通,则选择边 \((1,i)\),并在 \(A\)\(B\) 中都将 \(1\)\(i\) 合并,显然这部分选边一定合法

\(L\)\(A\) 中不与 \(1\) 连通的点的集合,\(R\)\(B\) 中不与 \(1\) 连通的点的集合(将 \(i\) 加入 \(L\) 后需要合并 \(1,i\) 再继续查找,即每个连通块只能选择至多一个点,\(R\) 同理,显然 \(L\cap R=\mathbb\emptyset\)

\(L\)\(R\) 中分别选择 \(\min(|L|,|R|)\) 个,然后依次匹配即可

显然合法(选择 \((u,v)\mid u\in L,v\in R\) 时,\(A\)\(u\)\(1\) 不连通但 \(B\) 中连通,\(v\) 中同理,显然满足要求)且数量达到上界

时间复杂度 \(O((n+m_1+m_2)\alpha(n))\)

代码

参考

posted @ 2025-08-27 06:35  Hstry  阅读(11)  评论(0)    收藏  举报