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