#P17350. PM11581 PointErasing
PM11581 PointErasing
题目描述
给定一个长度为 的整数序列 。它描述了平面上的 个点:对于每个 ,平面上都有一个点 。
Krolik 会不断进行如下操作:
- 从当前尚未被擦除的点中选择两个纵坐标不同的点 ;
- 以 作为一组对角顶点,作一个边与坐标轴平行的矩形;
- 擦除所有严格位于该矩形内部的点。
每次操作必须至少擦除一个点。如果已经不存在合法操作,过程结束。
对于不同的操作顺序,最后剩余的点数可能不同。请找出所有可能的最终剩余点数,并按从小到大的顺序输出。
注意:一个点“严格位于矩形内部”是指它位于矩形内部且不在矩形边界上。
输入格式
第一行输入一个整数 。
第二行输入 个整数 ,其中第 个点的坐标为 。
输出格式
第一行输出一个整数 ,表示可能的最终剩余点数的种类数。
第二行按从小到大的顺序输出 个整数,表示所有可能的最终剩余点数。
数据范围与约定
- ;
- 。
输入输出样例 #1
输入 #1
7
1 2 1 1 0 4 3
输出 #1
2
4 6
输入输出样例 #2
输入 #2
8
0 0 4 4 8 8 4 4
输出 #2
1
6
输入输出样例 #3
输入 #3
1
522
输出 #3
1
1
样例说明
对于样例 1,一种得到 个剩余点的方法是:先选择 与 ,擦除 和 ;再选择 与 ,擦除 。此时剩余 个点。
如果第一步直接选择 与 ,则只会擦除 ,之后不再存在合法操作,最终会剩余 个点。因此所有可能答案为 。