#include <bits/stdc++.h> #define pb push_back #define mp make_pair #define fi first #define se second using namespace std; int main() { ios_base::sync_with_stdio(false), cin.tie(NULL); int n; cin >> n; int h[n], h_sort[n]; for(int i = 0; i < n; i++) { cin >> h[i]; h_sort[i] = h[i]; } sort(h_sort, h_sort+n); vector<pair<int, int>> sytuacja; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(h[i] == h_sort[j]) { sytuacja.pb(mp(i+1, j+1)); } } } //for(auto a: sytuacja) cout << a.fi << ' ' << a.se << ", "; //cout << '\n'; bool unsorted = true; int res = 0; vector<int> ans1, ans2; while(unsorted) { bool help = true; for(int i = 0; i < n; i++) { if(sytuacja[i].fi != sytuacja[i].se) { help = false; break; } } if(help) { unsorted = false; break; } bool odw[n+1] = {}; for(int i = 0; i < n; i++) { if( (odw[sytuacja[i].fi] == false && odw[sytuacja[i].se] == false) && (sytuacja[i].fi != sytuacja[i].se) ) { ans1.pb(sytuacja[i].fi); ans2.pb(sytuacja[i].se); odw[sytuacja[i].fi] = true; odw[sytuacja[i].se] = true; int x = sytuacja[i].fi; sytuacja[i].fi = sytuacja[i].se; sytuacja[ sytuacja[i].se-1 ].fi = x; } } sort(sytuacja.begin(), sytuacja.end()); //for(auto a: sytuacja) cout << a.fi << ' ' << a.se << ", "; //cout << '\n'; res++; ans1.pb(0); ans2.pb(0); } cout << res; cout << '\n'; if(res) { int k = 0, p = 0; while(k < (int)ans1.size()) { while(ans1[k] != 0) k++; k--; cout << 2*(k-p+1) << '\n'; for(int i = p; i <= k; i++) cout << ans1[i] << ' '; for(int i = k; i >= p; i--) cout << ans2[i] << ' '; cout << '\n'; k += 2; p = k; } } return 0; }
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 | #include <bits/stdc++.h> #define pb push_back #define mp make_pair #define fi first #define se second using namespace std; int main() { ios_base::sync_with_stdio(false), cin.tie(NULL); int n; cin >> n; int h[n], h_sort[n]; for(int i = 0; i < n; i++) { cin >> h[i]; h_sort[i] = h[i]; } sort(h_sort, h_sort+n); vector<pair<int, int>> sytuacja; for(int i = 0; i < n; i++) { for(int j = 0; j < n; j++) { if(h[i] == h_sort[j]) { sytuacja.pb(mp(i+1, j+1)); } } } //for(auto a: sytuacja) cout << a.fi << ' ' << a.se << ", "; //cout << '\n'; bool unsorted = true; int res = 0; vector<int> ans1, ans2; while(unsorted) { bool help = true; for(int i = 0; i < n; i++) { if(sytuacja[i].fi != sytuacja[i].se) { help = false; break; } } if(help) { unsorted = false; break; } bool odw[n+1] = {}; for(int i = 0; i < n; i++) { if( (odw[sytuacja[i].fi] == false && odw[sytuacja[i].se] == false) && (sytuacja[i].fi != sytuacja[i].se) ) { ans1.pb(sytuacja[i].fi); ans2.pb(sytuacja[i].se); odw[sytuacja[i].fi] = true; odw[sytuacja[i].se] = true; int x = sytuacja[i].fi; sytuacja[i].fi = sytuacja[i].se; sytuacja[ sytuacja[i].se-1 ].fi = x; } } sort(sytuacja.begin(), sytuacja.end()); //for(auto a: sytuacja) cout << a.fi << ' ' << a.se << ", "; //cout << '\n'; res++; ans1.pb(0); ans2.pb(0); } cout << res; cout << '\n'; if(res) { int k = 0, p = 0; while(k < (int)ans1.size()) { while(ans1[k] != 0) k++; k--; cout << 2*(k-p+1) << '\n'; for(int i = p; i <= k; i++) cout << ans1[i] << ' '; for(int i = k; i >= p; i--) cout << ans2[i] << ' '; cout << '\n'; k += 2; p = k; } } return 0; } |