#include <bits/stdc++.h> using namespace std; long long n, d, m , p, s, w, k, c, a, b, x, y, z; string j; pair <int, int> tab[4000]; int wsk[40000]; int kol[40000]; int kol2[40000]; int wyn[4010][5000]; int odw[40000]; int main(){ cin.tie(0); ios_base::sync_with_stdio(0); cin >> n; for (int i=1; i<=n; i++){ cin >> tab[i].first; tab[i].second=i; } sort(tab+1, tab+n+1); for (int i=1; i<=n; i++){ kol[tab[i].second]=i; kol2[tab[i].second]=i; } a=0; k=0; while (a==0){ p=1; x=1; a=1; for (int i=1; i<=n; i++){ if (kol[i]!=i&&odw[i]!=1&&odw[kol[i]]!=1){ wsk[x]=i; x++; wsk[x]=kol[i]; x++; odw[i]=1; odw[kol[i]]=1; swap(kol[i], kol[kol[i]]); a=0; } } for (int i=1; i<=n; i++){ odw[i]=0; } x--; b=0; if (a==0){ wyn[k][b]=x; k++; b=0; } for (int i=1; i<=x; i++){ if (i%2==1){ wyn[k][b]=wsk[i]; b++; //cout << wsk[i] << " "; } wsk[i]==0; } for (int i=x; i>=1; i--){ if (i%2==0){ wyn[k][b]=wsk[i]; b++; //cout << wsk[i] << " "; } wsk[i]==0; } k++; //cout << '\n'; y++; } y--; cout << y << '\n'; k=0; while (wyn[k][0]!=0){ b=0; while (wyn[k][b]!=0){ cout << wyn[k][b] << " "; b++; } k++; cout << '\n'; } }
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 | #include <bits/stdc++.h> using namespace std; long long n, d, m , p, s, w, k, c, a, b, x, y, z; string j; pair <int, int> tab[4000]; int wsk[40000]; int kol[40000]; int kol2[40000]; int wyn[4010][5000]; int odw[40000]; int main(){ cin.tie(0); ios_base::sync_with_stdio(0); cin >> n; for (int i=1; i<=n; i++){ cin >> tab[i].first; tab[i].second=i; } sort(tab+1, tab+n+1); for (int i=1; i<=n; i++){ kol[tab[i].second]=i; kol2[tab[i].second]=i; } a=0; k=0; while (a==0){ p=1; x=1; a=1; for (int i=1; i<=n; i++){ if (kol[i]!=i&&odw[i]!=1&&odw[kol[i]]!=1){ wsk[x]=i; x++; wsk[x]=kol[i]; x++; odw[i]=1; odw[kol[i]]=1; swap(kol[i], kol[kol[i]]); a=0; } } for (int i=1; i<=n; i++){ odw[i]=0; } x--; b=0; if (a==0){ wyn[k][b]=x; k++; b=0; } for (int i=1; i<=x; i++){ if (i%2==1){ wyn[k][b]=wsk[i]; b++; //cout << wsk[i] << " "; } wsk[i]==0; } for (int i=x; i>=1; i--){ if (i%2==0){ wyn[k][b]=wsk[i]; b++; //cout << wsk[i] << " "; } wsk[i]==0; } k++; //cout << '\n'; y++; } y--; cout << y << '\n'; k=0; while (wyn[k][0]!=0){ b=0; while (wyn[k][b]!=0){ cout << wyn[k][b] << " "; b++; } k++; cout << '\n'; } } |