提交时间:2024-11-03 13:38:40

运行 ID: 34043

#include <bits/stdc++.h> using namespace std; int T,n,L; int p[2000006]; int q[2000006]; int main () { cin >> T; while (T--) { cin >> n >> L; for (int i = 1;i <= n;i++) { cin >> p[i]; q[p[i]] = i; } bool b = 0; vector <int> vi,vj,vk; int x = q[1],y = -1; for (int i = x + 1;i <= n;i++) { if (p[1] > p[i]) { y = i; break; } } if (y == -1) { b = 1; } else if (x != 1) { vi.push_back(1); vj.push_back(x); vk.push_back(y); swap(p[1],p[x]); swap(q[p[1]],q[p[x]]); } x = q[n],y = -1; for (int i = x - 1;i >= 1;i++) { if (p[n] < p[i]) { y = i; break; } } if (b && y == -1) { cout << -1 << endl; continue; } if (x != 1) { vi.push_back(1); vj.push_back(x); vk.push_back(y); swap(p[1],p[x]); swap(q[p[1]],q[p[x]]); } for (int i = 2;i < n;i++) { if (p[i] == i) { continue; } int a = q[i]; vi.push_back(1); vj.push_back(i); vk.push_back(a); swap(p[i],p[a]); swap(q[p[i]],q[p[a]]); } int sz = vi.size(); if (sz > L) { cout << -1 << endl; continue; } cout << sz << endl; for (int i = 0;i < sz;i++) { cout << vi[i] << ' '; cout << vj[i] << ' '; cout << vk[i] << endl; } } return 0; }