Codeforces Round 1024 (Div. 1) 解题报告

Codeforces Round 1024 (Div. 1)

解题报告

A

一眼螺旋向外填。怎么证明你别管~

B

奇数位置与偶数位置分别可以随便排序,但是分别的逆序对数量加起来奇偶性需要保持不变。特判一下最后几位即可。

C

定义所有 \(d_x\) 不为零的 \(x\) 所对应的取到 \(\max\) 时的 \((i,j)\)\(x\) 的选出对。不难发现两个选出对之间必然是交错的,即 \(\max(i) < \min(j)\)。否则存在 \(i_1 < j_1 < i_2 < j_2\),直接删掉这两个改选 \((i_1, j_2)\)(都用更小的 \(x\))必然也满足限制而且更优。

而且发现所用的颜色 \(x\) 也必然是先用小的再用大的。

所以可以枚举一个分界点,预处理算出每个前缀选出 \(k\) 个端点的最小 \(i\) 之和,后缀同理。这些都可以用线段树维护当前 \(\ge x\)\(a\) 有多少个,从而维护一个不减的 \(p\) 表示当前前缀最多选出多少个端点。

最后枚举一个分界点,统计答案时两边尽量选的最多,一边舍弃一些。

D

结论就是 \(b\) 是 cute 的,当且仅当找得到一种方式使得有且仅有一个 \(i\) 在 LIS 与 LDS 中都出现,其余被划分进 LIS / LDS 之一。把 \(i\) 称为交叉点。

那么一定是 \(b\)\(i\) 前面比它大的都在 LDS 里而且递减,比它小的都在 LIS 里而且递增,后面同理。发现考虑 \(b\)\(a\) 的子区间时这具有二分性,也即对于固定的 \(i\) 存在一个 \(L_i\)\(i\) 往左可以且最多可以取到 \(L_i\),这与右边如何取无关。同理右边定义 \(R_i\)。求出 \(L_i,R_i\) 之后发现左端点 \(\in [L_i,i]\),右端点 \(\in [i,R_i]\) 的区间都满足要求。对所有 \(i\) 做一个矩形面积并即可。

\(L\):考虑递推。记 \(f_i = \max_{j < i - 1, (a_{i - 1} - a_j)(a_i - a_j) \le 0} j\),则 \(L_i = \max(L_{i - 1},f_i + 1)\)。这是因为 \(a_j\) 是最近的夹在 \(a_{i-1},a_i\) 之间的数字,必然无法放入它。不考虑这样的数,则加入 \(a_i\) 不影响,仍由 \(L_{i-1}\) 决定边界。

E

显然的性质是一个点开始最多也就走 \(\log\) 次。

问题在于如何定义 DP 状态使得无后效性?答案是考虑当前状态到最终状态,有点像期望 DP。

具体来说,就是定义 \(f_{i,j}\) 为如果当前在 \(i\) 这个点,还想继续走 \(j\) 次的话,来到 \(i\) 所走的边 \((*,i)\) 最大值为多少。

初值 \(f_{u,0} = +\infty,f_{u,j}(j \neq 0) = -\infty\)

转移是枚举所有 \(f_{v,j-1} \ge w(u,v)\)\(v\)\(f_{u,j} \leftarrow \lfloor \dfrac{w(u,v)}{2} \rfloor\),箭头表示取 max。

直接做是 \(O(n^2\log n)\) 的,\(w(u,v)\) 可以 \(O(1)\),欧拉序求 LCA 即可。

外层枚举 \(j\),内层点的互相转移直接点分治前后扫两遍即可。

F

性质 DP 题,只能看题解了

posted @ 2025-06-09 23:22  Vizing  阅读(24)  评论(0)    收藏  举报