#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; } |
English