CF1419D2 Sage's Birthday (hard version)
题目描述
这是该问题的困难版本。与简单版本的区别在于,简单版本中所有价格 $a_i$ 都不相同。只有在你解决了两个版本的问题后,才能进行 hack。
今天是 Sage 的生日,她要去购物购买冰球。商店里有 $n$ 个冰球,排成一排,从左到右编号为 $1$ 到 $n$。每个冰球都有一个正整数价格。在本版本中,某些价格可能相同。
如果一个冰球的价格严格小于其左右相邻的两个冰球(即最靠近它左边和右边的冰球),那么这个冰球就是“便宜的”。最左边和最右边的冰球都不算便宜的。Sage 会选择所有便宜的冰球,然后只购买这些冰球。
你可以在 Sage 之前到商店,并随意重新排列这些冰球。请你求出 Sage 最多能买到多少个冰球,并给出冰球的最优排列方式。
输入格式
第一行包含一个整数 $n$ $(1 \le n \le 10^5)$,表示商店里的冰球数量。
第二行包含 $n$ 个整数 $a_1, a_2, \dots, a_n$ $(1 \le a_i \le 10^9)$,表示每个冰球的价格。
输出格式
第一行输出 Sage 最多能买到的冰球数量。
第二行输出冰球的最优排列方式。如果有多种答案,可以输出任意一种。
说明/提示
在样例中,无论如何排列冰球,都无法让 Sage 买到 $4$ 个冰球。如果将冰球按 $(3, 1, 4, 2, 4, 2, 5)$ 的顺序排列,Sage 会买到一个价格为 $1$ 的冰球和两个价格为 $2$ 的冰球。
由 ChatGPT 4.1 翻译