题目背景
春雨将过,忽而燕鸣轻唤,唤起春波荡漾。春波荡漾,漾起去年的回忆。回忆生香,香满檐下。檐下燕巢残旧,不禁落泪,抬头望归来之燕,心中一动,却是旧时相识……
题目描述
n 只燕在夕阳中飞过。按从前到后的顺序,第 i 只燕的大小为 pi,且 p 是一个长度为 n 的排列。
现在可以进行至多 L 次如下操作:
- 选定三个整数 i,j,k 满足 1≤i<j<k≤n,如果 pi>pk,交换第 i,j 只燕;否则交换第 j,k 只燕。
为了使队形整齐,我们希望燕是从前到后升序排列的,即 ∀1≤i≤n 都有 pi=i。
问是否可以达成目标。若可以,请构造一组符合要求的操作。
输入格式
本题有多组测试数据。
第一行一个整数 T,表示测试数据组数。
对于每组测试数据:
- 第一行两个整数 n,L。
- 第二行 n 个整数 p1,p2,…,pn。
输出格式
对于每组测试数据:
- 若无法用至多 L 次操作使得 p 升序排列,仅输出一行
-1
;
- 否则第一行输出一个整数表示操作次数 x,后 x 行每行输出三个整数 i,j,k 表示进行的操作。你需要保证 0≤x≤L,1≤i<j<k≤n。
提示
【提示】
一个长度为 n 的排列是一个满足 1 到 n 中的所有正整数恰好出现 1 次的数组。例如,[3,1,2] 是一个长度为 3 的排列,而 [5,5,1,2,3] 不是一个排列。
【样例 1 解释】
- 第一次操作中,i=1,j=3,k=4,由于 p1>p4,我们交换 p1,p3,此时 p=[1,2,4,3];
- 第二次操作中,i=2,j=3,k=4,由于 p2<p4,我们交换 p3,p4,此时 p=[1,2,3,4]。
【数据规模与约定】
本题采用捆绑测试。
- Subtask 1(5 points):n≤3。
- Subtask 2(5 points):n≤4。
- Subtask 3(5 points):T≤50,n≤8。
- Subtask 4(10 points):n≤8。
- Subtask 5(25 points):L=n+2。
- Subtask 6(25 points):L=n+1。
- Subtask 7(25 points):无特殊限制。
对于 100% 的数据,1≤T≤105,1≤n,∑n≤2×106,n≤L≤n+2,p 为一个 1∼n 的排列。