#include <bits/stdc++.h> using namespace std; int x[3006][2]; int y[3006][2]; int z[3006][2]; int main() { int n; cin >> n; ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); for(int i=0; i<n; i++) { int A; cin >> A; x[i][0]=A; x[i][1]=A; } int G=1; while(G==1) { G=0; for(int j=0; j<n-1; j++) { if(x[j][1]>x[j+1][1]) { int T=x[j][1]; x[j][1]=x[j+1][1]; x[j+1][1]=T; G=1; } } } for(int k=0; k<n; k++) { x[x[k][1]][2]=k; } for(int u=0; u<n; u++) { y[u][0]=x[x[u][0]][2]; } int L=0; int L1=0; int O=0; int O1=0; while(O<n) { if(y[O1][1]==1) { if(L1>L) { L=L1; } L1=0; O=O+1; O1=O; } else { y[O1][1]=1; O1=y[O1][0]; L1=L1+1; } } cout << (L+(L%2))/2 << "\n"; int Gm=1, G1=1, U=0, b=0; while(G1==1&&b<10) { b=b+1; G1=0; U=0; // for(int t=0; t<n; t++) // { //cout << y[t][0] << " z=" << z[t][0] << "=" << t << "\n"; // } for(int q=0; q<n; q++) {//cout << q << " " << y[q][0] << "\n"; if(y[q][0]==q) { z[q][0]=1000; } else if(z[y[q][0]][0]==Gm) { z[q][0]=Gm; } else if((z[q][0]<Gm)&&(z[y[q][0]][0]<Gm)) { int N=y[q][0]; y[q][0]=y[N][0]; y[N][0]=N; z[q][0]=Gm; z[y[q][0]][0]=Gm; z[U][1]=q; z[U+1][1]=y[N][0]; U=U+2; G1=1; } } if(U>0) { cout << U << "\n"; for(int o=0; o<U; o=o+2) { cout << z[o][1]+1 << " " << z[U-o-1][1]+1 << " "; } cout << "\n"; } Gm=Gm+1; } }
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 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 | #include <bits/stdc++.h> using namespace std; int x[3006][2]; int y[3006][2]; int z[3006][2]; int main() { int n; cin >> n; ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); for(int i=0; i<n; i++) { int A; cin >> A; x[i][0]=A; x[i][1]=A; } int G=1; while(G==1) { G=0; for(int j=0; j<n-1; j++) { if(x[j][1]>x[j+1][1]) { int T=x[j][1]; x[j][1]=x[j+1][1]; x[j+1][1]=T; G=1; } } } for(int k=0; k<n; k++) { x[x[k][1]][2]=k; } for(int u=0; u<n; u++) { y[u][0]=x[x[u][0]][2]; } int L=0; int L1=0; int O=0; int O1=0; while(O<n) { if(y[O1][1]==1) { if(L1>L) { L=L1; } L1=0; O=O+1; O1=O; } else { y[O1][1]=1; O1=y[O1][0]; L1=L1+1; } } cout << (L+(L%2))/2 << "\n"; int Gm=1, G1=1, U=0, b=0; while(G1==1&&b<10) { b=b+1; G1=0; U=0; // for(int t=0; t<n; t++) // { //cout << y[t][0] << " z=" << z[t][0] << "=" << t << "\n"; // } for(int q=0; q<n; q++) {//cout << q << " " << y[q][0] << "\n"; if(y[q][0]==q) { z[q][0]=1000; } else if(z[y[q][0]][0]==Gm) { z[q][0]=Gm; } else if((z[q][0]<Gm)&&(z[y[q][0]][0]<Gm)) { int N=y[q][0]; y[q][0]=y[N][0]; y[N][0]=N; z[q][0]=Gm; z[y[q][0]][0]=Gm; z[U][1]=q; z[U+1][1]=y[N][0]; U=U+2; G1=1; } } if(U>0) { cout << U << "\n"; for(int o=0; o<U; o=o+2) { cout << z[o][1]+1 << " " << z[U-o-1][1]+1 << " "; } cout << "\n"; } Gm=Gm+1; } } |