KOI TST 2026 部分题解

· · 个人记录

d1p1

固定 k,容易发现每个位置只会被至多两个长度为 2^k-1 的合法区间覆盖,因此修改单点每次只影响 \mathcal O(\log n) 个区间。

修改单点时先将以前覆盖它的删掉,再从小到大加入新的区间即可。时间复杂度 \mathcal O(n\log n)\sim\mathcal O(n\log^2n)

d1p2

还不会。

d1p3

45 度分析,就明显一些(?

首先要想到怎么刻画贪心合并出来的子树形态:考虑从下往上做,上传 f_{u,i} 表示 u 子树高度在 i 位置时的最小宽度。令任意子树 T,宽度序列 seq(T) = \{l_0, l_1, ..., l_k\} 来描述这个子树高度为 i 时宽度为 l_i。一个必要条件是,合法的宽度序列 l 必须满足对所有 i > 0,有 l_i \geq l_{i-1} - 1

seq(\text{leaf}) = \{0\}。假设某个节点 u 有两个子节点 v_Lv_R,它们的宽度序列分别为 PQ。设 uv_L,v_R 的边下界长度为 c_L,c_R,则在 PQ 的后面分别加 c_L-1,c_R-10,得到新的宽度序列。

考虑所有叶子有相同的 x+y,在 u 的子树中,高度 i 的宽度至少为 P_i + Q_i + 1。将合并后的序列 S 计算成 S_i = P_i + Q_i + 1,再从前往后执行 chkmax(S_i,S_{i-1}-1) 的操作,最终再追加一个 0 表示 u

缩颜色段后启发式合并即可做到 \mathcal O(n\log^2n) 的复杂度。

d1p4

考虑判定:操作顺序形如对 a 从小到大操作,每次取出 a 的所有最小值,那么至少有一个需要停留在这里,否则无解。剩下的位置进行 +1,直到全部操作完。

用一个递归判定的思路,从 [1,n] 开始操作,可以找出所有 x,使得所有跨越 x 的区间都是非法的。接下来认为 [1,n] 本身是合法的(事实上对于所有轮廓线分开做)

考虑刻画 ban 掉的 [l,r] 的矩形,每次考虑 \min 的所有取值,将删除的 \min 设为黑色,剩下的记为白色。如果一个 [l,r] 跨越了至少一个白色但是没跨越黑色那么就爆了。但是矩形数量依旧很爆,考虑让矩形带权:对于 ban 掉的矩形,取出所有相邻的黑点 x,y,加入 l\in[x+1,y-1],r\in[x+1,y-1],权值为 1;对此时的相邻点加入 [a+1,b-1],[a+1,b-1],权值为 -1

前者总操作数正确,而后者可以等修改时再统计(权值是累加的),总共 \mathcal O(n) 个矩形加。查询 (l,r) 考虑这个点点权是否 >0,那么离线扫描线,用树状数组维护就是 \mathcal O(n\log n) 的。

d2p1

容易想到对半分,但是进一步很难做,考虑 6\leq n 的限制和较小的 Q,不难想到尽量均等地划分成 6 个集合 S_{1\sim 6},对于所有 T\subseteq\{1,2,3,4,5,6\}1\leq |T|\leq 3,将 Y 设为 \cup S_{T_i},用这些信息就可以求出跨越集合之间的 X

发现询问次数恰好是 \binom{6}{3}+\binom{6}{2}+6=41,并且可以满足 \sum|S_{T_i}|\leq\lceil\frac n 2\rceil+1。再考虑 x_{i,j},y_{i,j},z_{i,j,k} 分别设为 (i,j) 的二元集合,一个在 i 两个在 j,以及三个在 i,j,k 的,解出来和即可。

d2p2

问一个菊花但是每个花瓣都是 2 元链即可,每个 2 元链都可以实现比较大小。

特殊处理一下中心被选以及 n 奇数的 case,考虑利用一下二进制分组的结构。

d2p3

不妨设 l,r 双单调,可以求出 h\to h+1 必须落在 [L_h,R_h] 区间内,满足 L,R 双单调。转化为有 H 个右部点,每个点对应一个区间,向区间内所有左部点连边,代价为选中的左部点的 a 之和,现在要求恰好选中 k 个。

猜测:令答案存在的区间为 ans_x\sim ans_y,那么这部分是凸的,并且每个对应方案都是删一个红加一个蓝。

先考虑 0 个蓝色位置的答案,这是经典贪心:对于所有 a 排序,维护当前集合 S,如果 S\cup \{i\} 存在完美匹配那么加入 i。使用 Hall 定理判定:\forall |S|\leq |N(S)|,转化为 S 选一段区间 [l,r],要求 preS_r-preS_{l}+1\leq idR_r-idL_{l}+1,移项后的限制是 \forall l\leq r 满足 preS_r-idR_r\leq preS_l-idL_l。线段树维护两者最值即可完成判定。

考虑 ans_x\to ans_y 的过程,会存在二元组集合 D,每对元素为一对红蓝节点,代表删一个红加一个蓝。由凸性,只需要求出 D 然后再对 \Delta 排序即为答案。

D:初始为 ans_x 对应的 S,按代价从小到大考虑当前蓝色元素 b,找到代价最大且已被插入的 r,将 r 替换为 b 且新的 S' 存在完美匹配。可行的 b 的替换范围是一段包含 r 的区间(考虑限制最严的 [l,r]),直接二分就是 \log^2 的。使用官方题解的 (,*,) 刻画可以是单 \log 的。

时间复杂度 \mathcal O(n\log n)\sim \mathcal O(n\log^2n)

d2p4

操作形如对 x 开始的严格前缀最大值位置做分数 +1,考虑用单侧递归线段树维护这个标记。标记的方式也可以模仿单侧递归的过程,每次操作的复杂度同样是 \mathcal O(\log^2n)

时间复杂度 \mathcal O(q\log^2n)