# include <bits/stdc++.h>
typedef int ll;
using namespace std;
const ll inf = 1e9 + 7;
ll n , k , q;
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
// for (int test = 1; test <= 10000; test++) {
cin >> n;
// n = 20;
vector<ll>h1(n);
for (int i = 0; i < n; i++) {
cin >> h1[i];
}
// Generate(h1);
vector<ll>h2 = h1 , kop = h1;
sort(h2.begin() , h2.end());
vector<ll>pos(3005);
for (int i = 0; i < n; i++) {
pos[h2[i]] = i;
}
vector<bool>used(n + 5);
vector<vector<ll> >vec;
for (int i = 0; i < n; i++) {
if (used[i] || pos[h1[i]] == i)continue;
ll nom = i;
vector<ll>cur;
while (1) {
used[nom] = 1;
cur.push_back(nom);
nom = pos[h1[nom]];
if (used[nom])break;
}
if (cur.size() < 2)assert(0);
vec.push_back(cur);
}
/* for (int i = 0; i < vec.size(); i++) {
for (auto v : vec[i])cout << v + 1 << ' ';
cout << endl;
} */
vector<deque<ll> >res;
// ll Max = -inf;
while (vec.size() > 0) {
deque<ll>cur_d;
vector<vector<ll> >new_vec;
for (int i = 0; i < vec.size(); i++) {
/* Max = max(Max , (ll)vec[i].size());
if ((int)vec[i].size() < 2) {
cout << -1;
return 0;
} */
if ((int)vec[i].size() == 2) {
cur_d.push_front(vec[i][0]);
cur_d.push_back(vec[i][1]);
continue;
} else {
vector<ll>new_vi;
for (int j = 0; j < vec[i].size(); j += 2) {
if (j + 1 < (int)vec[i].size()) {
cur_d.push_front(vec[i][j]);
cur_d.push_back(vec[i][j + 1]);
}
new_vi.push_back(vec[i][j]);
}
new_vec.push_back(new_vi);
}
}
// cout << new_vec.size() << endl;
vec = new_vec;
res.push_back(cur_d);
}
// vector<vector<ll> >ans;
cout << res.size() << '\n';
for (int i = 0; i < res.size(); i++) {
cout << res[i].size() << '\n';
// vector<ll>round;
while (!res[i].empty()) {
cout << res[i].front() + 1 << ' ';
// round.push_back(res[i].front());
res[i].pop_front();
}
cout << '\n';
// ans.push_back(round);
}
/* if (!check(ans , kop) || get_ans(Max) < res.size()) {
cout << -1;
return 0;
}
} */
}
/*
4
2827 1074 2431 1152
2900 1968 2994 1633
*/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | # include <bits/stdc++.h> typedef int ll; using namespace std; const ll inf = 1e9 + 7; ll n , k , q; int main() { ios_base::sync_with_stdio(0); cin.tie(0); // for (int test = 1; test <= 10000; test++) { cin >> n; // n = 20; vector<ll>h1(n); for (int i = 0; i < n; i++) { cin >> h1[i]; } // Generate(h1); vector<ll>h2 = h1 , kop = h1; sort(h2.begin() , h2.end()); vector<ll>pos(3005); for (int i = 0; i < n; i++) { pos[h2[i]] = i; } vector<bool>used(n + 5); vector<vector<ll> >vec; for (int i = 0; i < n; i++) { if (used[i] || pos[h1[i]] == i)continue; ll nom = i; vector<ll>cur; while (1) { used[nom] = 1; cur.push_back(nom); nom = pos[h1[nom]]; if (used[nom])break; } if (cur.size() < 2)assert(0); vec.push_back(cur); } /* for (int i = 0; i < vec.size(); i++) { for (auto v : vec[i])cout << v + 1 << ' '; cout << endl; } */ vector<deque<ll> >res; // ll Max = -inf; while (vec.size() > 0) { deque<ll>cur_d; vector<vector<ll> >new_vec; for (int i = 0; i < vec.size(); i++) { /* Max = max(Max , (ll)vec[i].size()); if ((int)vec[i].size() < 2) { cout << -1; return 0; } */ if ((int)vec[i].size() == 2) { cur_d.push_front(vec[i][0]); cur_d.push_back(vec[i][1]); continue; } else { vector<ll>new_vi; for (int j = 0; j < vec[i].size(); j += 2) { if (j + 1 < (int)vec[i].size()) { cur_d.push_front(vec[i][j]); cur_d.push_back(vec[i][j + 1]); } new_vi.push_back(vec[i][j]); } new_vec.push_back(new_vi); } } // cout << new_vec.size() << endl; vec = new_vec; res.push_back(cur_d); } // vector<vector<ll> >ans; cout << res.size() << '\n'; for (int i = 0; i < res.size(); i++) { cout << res[i].size() << '\n'; // vector<ll>round; while (!res[i].empty()) { cout << res[i].front() + 1 << ' '; // round.push_back(res[i].front()); res[i].pop_front(); } cout << '\n'; // ans.push_back(round); } /* if (!check(ans , kop) || get_ans(Max) < res.size()) { cout << -1; return 0; } } */ } /* 4 2827 1074 2431 1152 2900 1968 2994 1633 */ |
English