编程题
### 问题描述 小夜在一次冒险中,发现了一个包含 $N$ 颗魔法石的宝箱。每颗魔法石上都刻着一个非负整数。小夜发现,她可以通过施展一个魔法来改变一些魔法石上的数字: - 小夜可以选择两颗魔法石 $i$ 和 $j$,它们上面刻着的数字相同,然后改变魔法石 $i$ 和 $j$ 之间所有魔法石(包括 $i$ 和 $j$)上的数字为 $A_i$。 小夜希望通过施展这个魔法,使得魔法石上的数字按照非递减的顺序排列。请你帮助小夜计算出,最少需要施展多少次魔法,如果无法通过施展魔法将魔法石上的数字排序,输出 $-1$。 ### 输入格式 第一行输入一个整数 $T$,表示测试用例的数量。 每个测试用例包含两行,第一行包含一个整数 $N$,表示魔法石的数量。第二行包含 $N$ 个整数,表示每颗魔法石上刻的数字。 ### 输出格式 对于每个测试用例,输出一行,表示最少需要施展的魔法次数 如果无法通过施展魔法将魔法石上的数字排序,输出 $-1$。 ### 输入样例 ``` 2 6 1 2 1 3 4 3 3 3 1 2 ``` ### 输出样例 ``` 2 -1 ``` ### 说明 第一个测试用例:第一次施展魔法,选择第一颗和第三颗魔法石,然后将这两颗魔法石之间所有魔法石的数字都改为 $1$,得到新的魔法石序列 $[1,1,1,3,4,3]$。第二次施展魔法,选择第四颗和第六颗魔法石,然后将这两颗魔法石之间所有魔法石的数字都改为 $3$,得到新的魔法石序列 $[1,1,1,3,3,3]$。这样,魔法石上的数字就按照非递减的顺序排列了。 第二个测试用例:无论如何施展魔法,都无法将魔法石上的数字排序。 ### 评测数据范围 $1 \leq T≤10^3$。 $1 ≤ N ≤ 2 \times 10^5$。 $0 ≤ A_i ≤ N$。 所有测试用例中 $N$ 的总和不超过 $2 \times 10^5$。
查看答案
赣ICP备20007335号-2