P17367 [ECNA 2023] A Pivotal Question
题目描述
快速排序是 Tony Hoare 于 1959 年提出的一种递归排序算法。其中一个主要步骤是“划分”:给定数组中的一个元素 $p$ 作为枢轴,把数组重新排列成
$$
X_L,\ p,\ X_R,
$$
使 $X_L$ 中所有值都不大于 $p$,$X_R$ 中所有值都大于 $p$。
例如,数组以 $13$ 为枢轴完成划分后,可以把所有不大于 $13$ 的元素放在它左侧,所有大于 $13$ 的元素放在右侧。注意,$X_L$ 和 $X_R$ 内部通常没有排序,并且其中任意一个都可以为空。
如何执行划分、如何选择枢轴,都是很有意思但与本题无关的问题。给定一个数组,假设它已经完成某次划分,请找出其中所有可能作为枢轴值的元素;如果数组不可能是划分后的结果,也要据此作答。
输入格式
输入首先给出一个正整数 $n$($1\le n\le 10^6$),表示数组大小;随后给出 $n$ 个正整数,表示数组中的值。所有值互不相同,且不超过 $10^6$。
输出格式
先输出整数 $m$,表示数组中可能作为划分枢轴的值的数量;随后按这些值在输入中的出现顺序输出它们。如果 $m>100$,只输出前 $100$ 个枢轴值。$m=0$ 表示数组不是任何一次合法划分后的结果。