P11347 「KTSC 2023 R2」学生

· · 题解

一道有趣的思维题,不过好像比较板。

先考虑题目的朴素版:已知若干集合(相较于原题目少了区间补集的限制),求最早有一个人发现自己不在某集合内的时间。
f(S) 表示包含所有 S 中的人的集合构成的总集合。讨论在每个时间结束的条件:

于是我们得到结论:i 轮结束的充要条件是 \exist f(\{x_1,x_2\dots,x_i\})=\varnothing,且报告的人的集合为满足上述条件的并

回到原问题,即求出最少的人数,使得每一个区间的补集都不能完全包含之。这又等价于每一个区间都至少包含一个人。这是一个十分基础的问题,贪心扫一遍即可求出最小人数。还要求所有合法构造的人集合的并,这个就左右分别扫一遍,记录下两次贪心的方案,判断在强制选 i 号点之后能取到最小人数是不是刚刚的答案即可。

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