#include<iostream> #include<algorithm> #include<vector> using namespace std; int odw[1000007]; int pozS[1000007]; vector <int> WYN[1000007]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; int T[n]; int S[n]; for (int i=0; i<n; i++){ cin>>T[i]; S[i]=T[i]; } sort(S, S+n); for (int i=0; i<n; i++) pozS[S[i]]=i; /*for (int i=0; i<n; i++) cout<<T[i]<<" "; cout<<endl; for (int i=0; i<n; i++) cout<<S[i]<<" "; cout<<endl;*/ int git=0; int licznik=0; while (git==0){ git=1; for (int i=0; i<100007; i++) odw[i]=0; for (int i=0; i<n; i++){ int miejsce=pozS[T[i]]; if (odw[i]==0 && odw[miejsce]==0 && T[i]!=S[i]){ odw[i]=1; odw[miejsce]=1; int ti=T[i]; T[i]=T[miejsce]; T[miejsce]=ti; //cout<<miejsce<<" "<<i<<"\n"; WYN[2*licznik].push_back(miejsce+1); WYN[2*licznik+1].push_back(i+1); if (T[i]!=S[i]) git=0; } } licznik++; } cout<<licznik<<"\n"; for (int i=0; i<licznik; i++){ cout<<WYN[i].size()*2<<"\n"; for (int j=0; j<WYN[2*i].size(); j++) cout<<WYN[2*i][j]<<" "; for (int j=WYN[i*2+1].size()-1; j>=0; j--) cout<<WYN[2*i+1][j]<<" "; 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 | #include<iostream> #include<algorithm> #include<vector> using namespace std; int odw[1000007]; int pozS[1000007]; vector <int> WYN[1000007]; int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; int T[n]; int S[n]; for (int i=0; i<n; i++){ cin>>T[i]; S[i]=T[i]; } sort(S, S+n); for (int i=0; i<n; i++) pozS[S[i]]=i; /*for (int i=0; i<n; i++) cout<<T[i]<<" "; cout<<endl; for (int i=0; i<n; i++) cout<<S[i]<<" "; cout<<endl;*/ int git=0; int licznik=0; while (git==0){ git=1; for (int i=0; i<100007; i++) odw[i]=0; for (int i=0; i<n; i++){ int miejsce=pozS[T[i]]; if (odw[i]==0 && odw[miejsce]==0 && T[i]!=S[i]){ odw[i]=1; odw[miejsce]=1; int ti=T[i]; T[i]=T[miejsce]; T[miejsce]=ti; //cout<<miejsce<<" "<<i<<"\n"; WYN[2*licznik].push_back(miejsce+1); WYN[2*licznik+1].push_back(i+1); if (T[i]!=S[i]) git=0; } } licznik++; } cout<<licznik<<"\n"; for (int i=0; i<licznik; i++){ cout<<WYN[i].size()*2<<"\n"; for (int j=0; j<WYN[2*i].size(); j++) cout<<WYN[2*i][j]<<" "; for (int j=WYN[i*2+1].size()-1; j>=0; j--) cout<<WYN[2*i+1][j]<<" "; cout<<"\n"; } } |