GJOI noip_csp训练赛4

posted on 2025-09-26 12:47:15 | under | source

A B

简单 dp、简单贪心。

C. P12546 [UOI 2025] Convex Array

link
就是差分数组递增的形式,于是问题:将原序列拆分为两个不交的递增且增值递增的子序列。

先排个序,记 \(f_{i,a,b,c,d}\) 为考虑 \(1\dots i\) 的元素,两个子序列的末尾两位分别是 \((a,b),(c,d)\) 是否合法。

考虑一些优化,注意到 \(i,i-1\) 一定在序列中,同时次大值一定越大越好。止步于此

进一步还能考虑 \(i-2\) 的位置,将状态用四元组表示:

  • \((i,i-1,a,b)\)
  • \((i,i-2,i-1,a)\)
  • \((i,a,i-1,i-2)\)

考虑如何转移到 \(f_{i+1}\),后两种是 \(O(1)\) 的直接转移。对于第一种,分讨 \(i+1\) 放那个子序列:

  • \((i,i-1)\to (i+1,i)\):相当于直接继承数组。
  • \((a,b)\to (i+1,a)\):相当于转移到第三种情况,而这种情况只需取最大的 \(a\),条件为 \(a_{i+1}\ge 2a-b\),令 \(2a-b\) 为下标相当于求前缀最大的 \(a\),而限制越来越松于是拿两个堆直接维护即可。

总结:详细分讨是必要的,一些难以下手优化的 dp 状态可从分讨入手。

D. P11516 [CCO 2024] Summer Driving

link

判掉 \(A\le B\),因为 Bob 可以直接撤销 Alice 的操作。

\(R\) 为根,祖先链都被走过,所以深度一定越来越深。考虑 Alice 走一步后 Bob 的决策:若是跳祖先后向下走,那么限制为祖先链被 Ban 了;若是停留在祖先链上,限制为祖先链以及一个儿子子树被 Ban 了。

分别记为 \(f_x,g_x\)\(f_x\) 表示在 \(x\)\(g_x\) 表示现在 \(fa_x\)\(x\) 子树不能走。

按深度从大到小转移,每次暴力枚举 Alice 的决策看 Bob 最优能取到多少,均摊 \(O(n)\)。现在考虑 Bob,对于 \(g\) 就是链查询,对于 \(f\) 是扣掉祖先链的邻域查询,用点分树维护之。

具体来说:若分治中心不为其祖先,则不用管;否则,还要扣掉是分治中心祖先的点。那么每个分治中心开两棵线段树分别维护其祖先和非祖先即可。

\(O(n\log^2 n)\)

总结:适当强化条件以增加性质、便于 dp;邻域查询考虑点分树,而一些拓展如扣掉祖先链,也可以通过对分治中心的分讨实现。

posted @ 2026-01-13 12:17  Zwi  阅读(0)  评论(0)    收藏  举报