#include <bits/stdc++.h> using namespace std; int main(){ cin.tie(0); int n; cin>>n; vector<pair<int,int>>a(n); for(int i=0;i<n;i++){ cin>>a[i].first; a[i].second=i; } sort(a.begin(),a.end()); vector<int>b(n); for(int i=0;i<n;i++){ b[a[i].second]=i; } vector<int>pos(n); for(int i=0;i<n;i++){ pos[b[i]]=i; } cout<<2<<'\n'; vector<int>front,back; bool ok=false; int start=0; int ile=n; for(int i=0;i<n;i++){ if(b[i]!=i and ok==false){ start=i; ok=true; } if(b[i]==i) ile--; } int x=pos[start],y=start; int cnt=0; while(1){ if(x==y)break; swap(b[x],b[y]); front.push_back(x); back.push_back(y); int z=x; x=pos[x]; y=b[z]; cnt++; } cout<<cnt<<'\n'; for(int i=0;i<front.size();i++) cout<<front[i]+1<<' '; for(int i=back.size()-1;i>=0;i--) cout<<back[i]+1<<' '; cnt=0; for(int i=0;i<n;i++) if(b[i]!=i)cnt++; cout<<'\n'<<cnt/2<<'\n'; vector<bool>vis(n); front.clear(),back.clear(); for(int i=0;i<n;i++){ if(b[i]!=i and vis[i]==false and vis[b[i]]==false){ front.push_back(i+1); back.push_back(b[i]+1); vis[i]=true; vis[b[i]]=true; } } for(int i=0;i<front.size();i++) cout<<front[i]<<' '; for(int i=back.size()-1;i>=0;i--) cout<<back[i]<<' '; }
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 | #include <bits/stdc++.h> using namespace std; int main(){ cin.tie(0); int n; cin>>n; vector<pair<int,int>>a(n); for(int i=0;i<n;i++){ cin>>a[i].first; a[i].second=i; } sort(a.begin(),a.end()); vector<int>b(n); for(int i=0;i<n;i++){ b[a[i].second]=i; } vector<int>pos(n); for(int i=0;i<n;i++){ pos[b[i]]=i; } cout<<2<<'\n'; vector<int>front,back; bool ok=false; int start=0; int ile=n; for(int i=0;i<n;i++){ if(b[i]!=i and ok==false){ start=i; ok=true; } if(b[i]==i) ile--; } int x=pos[start],y=start; int cnt=0; while(1){ if(x==y)break; swap(b[x],b[y]); front.push_back(x); back.push_back(y); int z=x; x=pos[x]; y=b[z]; cnt++; } cout<<cnt<<'\n'; for(int i=0;i<front.size();i++) cout<<front[i]+1<<' '; for(int i=back.size()-1;i>=0;i--) cout<<back[i]+1<<' '; cnt=0; for(int i=0;i<n;i++) if(b[i]!=i)cnt++; cout<<'\n'<<cnt/2<<'\n'; vector<bool>vis(n); front.clear(),back.clear(); for(int i=0;i<n;i++){ if(b[i]!=i and vis[i]==false and vis[b[i]]==false){ front.push_back(i+1); back.push_back(b[i]+1); vis[i]=true; vis[b[i]]=true; } } for(int i=0;i<front.size();i++) cout<<front[i]<<' '; for(int i=back.size()-1;i>=0;i--) cout<<back[i]<<' '; } |