P13520 [KOI 2025 #2] 存放箱子 题解 / Dilworth 定理学习笔记

· · 题解

:::::info[闲话]{open} 来一篇严谨证明题解! ::::: :::::info[题目基本信息] 考察:Dilworth 定理,线段树(提高+/省选-)。
题目简介:
给定 \{s_n\},\{c_n\},定义 a 可以包含 b 当且仅当 s_a\le c_b,对于每一个 k,询问对于 [1,k] 内的所有整数,每个整数可以钦定它包含最多一个数,问最少有几个数不被其它数包含。
数据范围:

S 的最小链覆盖数等于 T 的最小链覆盖数加 1,传递得到 S 的最小链覆盖数等于 S 的最长反链长度,故在这种情况下命题成立。
T 的最长反链等于 S 的时,找到 T 的最长反链 P,设集合 S^-=\{x\in S|\exists p\in P,x\preceq p\},S^+=\{x\in S|\exists p\in P,p\preceq x\},那么有以下性质:

S^-,S^+ 应用归纳假设,然后就得出了 S^-S^+S 的最小链覆盖数条链,同时每条链都包含了 P 内的一个元素,将 S^-S^+ 的最小链覆盖内的链一一对应拼接即可构造。
证毕。 ::::: 好的我们将这个问题转化为最长反链,我们注意到对于 i,j,它们不能互相包含当且仅当 (c_i,s_i](c_j,s_j] 有交集,然后我们每次在线段树上对 (c_i,s_i] 区间加 1 查询全局最大值即可。
然后我们就做完了此题。
时间复杂度为 \Theta(n\log n),空间复杂度为 \Theta(n)

code