#include <iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
ios_base::sync_with_stdio;
cin.tie(0);
int n;
cin >> n;
vector<pair<int,int>> tab(n);
for (int i = 0; i < n; i++) {
cin >> tab[i].first;
tab[i].second = i;
}
sort(tab.begin(),tab.end());
/*for (int i = 0; i < n; i++) {
cout << tab[i].first<<" ";
cout << tab[i].second<<" ";
}*/
vector<bool> byl(n, 0);
int odp = 0;
int licz = 0;
int pom = 0;
int aaah = 0;
int dl = 0;
int amortyzacja = 0;
vector<vector<int>>zamiany;
while (licz == 0) {
for (int i = amortyzacja; i < n; i++) {
if (byl[i] == 0 && i !=tab[i].second) {
pom = tab[i].second;
amortyzacja = i;
break;
}
licz = 1;
}
zamiany.push_back({0});
// cout << " ";
while (byl[pom]== 0) {
byl[pom] = 1;
zamiany[aaah].push_back(pom);
pom = tab[pom].second;
dl++;
if (dl > odp) odp = dl;
}
dl = 0;
aaah++;
}
odp--;
cout << odp<< '\n';
/*for (int i = 0; i < zamiany.size(); i++) {
for (int j = 1; j < zamiany[i].size(); j++) {
cout << zamiany[i][j];
}
cout << endl;
}*/
int ind = 1;
int rozmiar = 2*(zamiany.size() - 1);
for (int k = 0; k < odp; k++) {
for (int i = 0; i < zamiany.size(); i++) {
if (ind+1 < zamiany[i].size()) {
cout << zamiany[i][ind] + 1;
}
}
for (int i = zamiany.size()-1; i >-1 ; i--) {
// cout << i << ind + 1;
if (ind + 1 < zamiany[i].size()) {
cout << zamiany[i][ind + 1] + 1;
if (ind + 1 == zamiany[i].size() - 1) rozmiar--;
}
}
ind++;
cout << endl;
}
}
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 | #include <iostream> #include<vector> #include<algorithm> using namespace std; int main() { ios_base::sync_with_stdio; cin.tie(0); int n; cin >> n; vector<pair<int,int>> tab(n); for (int i = 0; i < n; i++) { cin >> tab[i].first; tab[i].second = i; } sort(tab.begin(),tab.end()); /*for (int i = 0; i < n; i++) { cout << tab[i].first<<" "; cout << tab[i].second<<" "; }*/ vector<bool> byl(n, 0); int odp = 0; int licz = 0; int pom = 0; int aaah = 0; int dl = 0; int amortyzacja = 0; vector<vector<int>>zamiany; while (licz == 0) { for (int i = amortyzacja; i < n; i++) { if (byl[i] == 0 && i !=tab[i].second) { pom = tab[i].second; amortyzacja = i; break; } licz = 1; } zamiany.push_back({0}); // cout << " "; while (byl[pom]== 0) { byl[pom] = 1; zamiany[aaah].push_back(pom); pom = tab[pom].second; dl++; if (dl > odp) odp = dl; } dl = 0; aaah++; } odp--; cout << odp<< '\n'; /*for (int i = 0; i < zamiany.size(); i++) { for (int j = 1; j < zamiany[i].size(); j++) { cout << zamiany[i][j]; } cout << endl; }*/ int ind = 1; int rozmiar = 2*(zamiany.size() - 1); for (int k = 0; k < odp; k++) { for (int i = 0; i < zamiany.size(); i++) { if (ind+1 < zamiany[i].size()) { cout << zamiany[i][ind] + 1; } } for (int i = zamiany.size()-1; i >-1 ; i--) { // cout << i << ind + 1; if (ind + 1 < zamiany[i].size()) { cout << zamiany[i][ind + 1] + 1; if (ind + 1 == zamiany[i].size() - 1) rozmiar--; } } ind++; cout << endl; } } |
English