CF2233D Goods on the Shelf

题目描述

在超市中,相同类型的商品通常会被放在一起,这样可以让货架看起来整齐,也方便顾客找到所需的商品。 用一个长度为 $n$ 的数组 $a$ 描述货架,其中 $a_i$ 表示第 $i$ 个位置的商品类型。 如果对于所有满足 $1 \le i < j \le n$ 且 $a_i = a_j$ 的位置,下面的条件成立,则称货架排列是正确的:对于从 $i$ 到 $j$ 之间的每个 $k$,都有 $a_k = a_i$。换句话说,每种类型的商品在货架上都必须形成一个连续的块。 你可以至多选择两个不同的位置并交换这两处商品,也可以选择不交换。 请判断是否可能通过至多一次交换操作后,使得货架排列正确。

输入格式

每个测试点包含多个测试用例。第一行为测试用例数 $t$($1 \le t \le 10^4$)。接下来的描述为每个测试用例内容。 每个测试用例第一行包含一个整数 $n$($2 \le n \le 2 \cdot 10^5$),表示货架商品的数量。 第二行包含 $n$ 个整数 $a_i$($1 \le a_i \le 10^9$),表示第 $i$ 个位置上的商品类型。 额外输入限制: - 所有测试用例中 $n$ 的总和不超过 $2 \cdot 10^5$。

输出格式

对于每个测试用例,输出以下之一: - 如果不可能将货架排列正确,输出 NO; - 如果可以通过至多一次交换两个商品后将货架排列正确,输出 YES。 你可以用任意大小写组合输出答案,例如“YES”,“YeS”,“NO”,“nO”等均可被接受。

说明/提示

在第一个示例中,你可以交换第 $1$ 个和第 $2$ 个商品,此时货架变为 $[2, 1, 1]$。 在第二个示例中,货架已经排列正确。 在第三个示例中,无法通过一次交换将货架排列正确。 在第六个示例中,你可以交换第 $1$ 个和第 $4$ 个商品,此时货架排列正确。 由 ChatGPT 5 翻译