CF1685A.Circular Local MiniMax

传统题 时间 2000 ms 内存 256 MiB 5 尝试 1 已通过 1 标签

Circular Local MiniMax

题目描述

给你 nn 个整数 a1,a2,,an a_1, a_2, \ldots, a_n 。 问有没有可能将它们排列在一个圆上,使每个数字严格地大于其相邻的两个数字或严格地小于其相邻的两个数字?

换句话说,检查是否存在 b1,b2,,bn b_1, b_2, \ldots, b_n 的整数 a1,a2,,an a_1, a_2, \ldots, a_n 的重新排列,使得 i i 1 1 n n 中至少有一个以下条件成立。

  • bi1<bi>bi+1 b_{i-1} < b_i > b_{i+1}
  • bi1>bi<bi+1 b_{i-1} > b_i < b_{i+1}

为了使前面的公式对 i=1 i=1 i=n i=n 有意义,我们应定义 b0=bn b_0=b_n bn+1=b1 b_{n+1}=b_1

输入格式

输入的第一行包含一个整数 t t ( 1t3104 1 \le t \le 3\cdot 10^4 ) ,表示数据组数。

接下来 TT 行,第一行包含一个的整数 n n ( 3n105 3 \le n \le 10^5 ) ,

第二行包含 n n 整数 a1,a2,,an a_1, a_2, \ldots, a_n ( 0ai109 0 \le a_i \le 10^9 ) 。(n2105\sum n \le 2 \cdot 10^5

输出格式

对于每组数据,如果不可能将数字排列在满足语句条件的圆圈上,则输出 NO \texttt{NO}

否则,输出 YES \texttt{YES} 。在第二行,输出 b1,b2,,bn b_1, b_2, \ldots, b_n ,这是 a1,a2,,an a_1, a_2, \ldots, a_n 的重新排列,并且满足声明中的条件。如果有多种有效的数字排列方式,你可以输出其中任何一种。

样例解释

可以证明,对于第一个和第三个测试案例,没有有效的安排。

在第二个测试案例中,安排 [1,8,4,9] [1, 8, 4, 9] 是有效的。在这个排列中,1144 都比它们相邻的数小,而 898、9 则较大。

在第四个测试案例中,排列方式 [111111111111][1,11,1,111,1,1111] 有效。在这个排列中,等于11的三个元素比它们相邻的数小,而所有其他元素都比它们相邻的数大。

样例

4
3
1 1 2
4
1 9 8 4
4
2 0 2 2
6
1 1 1 11 111 1111
NO
YES
1 8 4 9 
NO
YES
1 11 1 111 1 1111 

在线编程 IDE

建议全屏模式获得最佳体验