#include <iostream> #include <vector> #include <algorithm> #include <map> using namespace std; int main() { int n; cin >> n; vector<int> lista; for (int i = 0; i < n; i++) { int x; cin >> x; lista.push_back(x); } vector<int> sorted_lista = lista; sort(sorted_lista.begin(), sorted_lista.end()); map<int, int> slownik; for (int i = 0; i < sorted_lista.size(); i++) { slownik[sorted_lista[i]] = i; } int licznik = 0; vector<int> output; vector<int> naglowki; while (true) { bool zmieniono = false; vector<int> wynik; vector<int> wynik2; map<int, int> uzyte; for (int i = 0; i < lista.size(); i++) { if (i != slownik[lista[i]]) { if (uzyte.find(i + 1) == uzyte.end() && uzyte.find(slownik[lista[i]] + 1) == uzyte.end()) { wynik.push_back(i + 1); wynik2.push_back(slownik[lista[i]] + 1); uzyte[i + 1] = -1; uzyte[slownik[lista[i]] + 1] = -1; swap(lista[slownik[lista[i]]], lista[i]); zmieniono = true; } } } if (zmieniono == false) { break; } reverse(wynik.begin(), wynik.end()); naglowki.push_back(wynik.size() + wynik2.size()); for (int i = 0; i < wynik.size(); i++) { output.push_back(wynik[i]); } for (int i = 0; i < wynik2.size(); i++) { output.push_back(wynik2[i]); } licznik++; } cout << licznik << endl; if (output.size() / 2 == 0) { cout << 0 << endl; cout << 0 << endl; } int i2 = 0; int max = 0; for (int i=0; i<naglowki.size(); i++) { cout<<naglowki[i]<<endl; max = i2; for (i2 = i2; i2 < max + naglowki[i]; i2++) { cout << output[i2] << " "; } cout<<'\n'; } 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 | #include <iostream> #include <vector> #include <algorithm> #include <map> using namespace std; int main() { int n; cin >> n; vector<int> lista; for (int i = 0; i < n; i++) { int x; cin >> x; lista.push_back(x); } vector<int> sorted_lista = lista; sort(sorted_lista.begin(), sorted_lista.end()); map<int, int> slownik; for (int i = 0; i < sorted_lista.size(); i++) { slownik[sorted_lista[i]] = i; } int licznik = 0; vector<int> output; vector<int> naglowki; while (true) { bool zmieniono = false; vector<int> wynik; vector<int> wynik2; map<int, int> uzyte; for (int i = 0; i < lista.size(); i++) { if (i != slownik[lista[i]]) { if (uzyte.find(i + 1) == uzyte.end() && uzyte.find(slownik[lista[i]] + 1) == uzyte.end()) { wynik.push_back(i + 1); wynik2.push_back(slownik[lista[i]] + 1); uzyte[i + 1] = -1; uzyte[slownik[lista[i]] + 1] = -1; swap(lista[slownik[lista[i]]], lista[i]); zmieniono = true; } } } if (zmieniono == false) { break; } reverse(wynik.begin(), wynik.end()); naglowki.push_back(wynik.size() + wynik2.size()); for (int i = 0; i < wynik.size(); i++) { output.push_back(wynik[i]); } for (int i = 0; i < wynik2.size(); i++) { output.push_back(wynik2[i]); } licznik++; } cout << licznik << endl; if (output.size() / 2 == 0) { cout << 0 << endl; cout << 0 << endl; } int i2 = 0; int max = 0; for (int i=0; i<naglowki.size(); i++) { cout<<naglowki[i]<<endl; max = i2; for (i2 = i2; i2 < max + naglowki[i]; i2++) { cout << output[i2] << " "; } cout<<'\n'; } return 0; } |