#include<bits/stdc++.h>
using namespace std;
const int MAXN=3e3+9;
pair<int,int>sor[MAXN];
int t[MAXN];
int por[MAXN];
int ktor[MAXN];
vector<int>kon,poc;
void sorr(int x){
int kt=ktor[x];
int pr=por[x];
int prkt=por[kt];
int prpr=por[pr];
swap(ktor[prkt],ktor[prpr]);
swap(por[pr],por[kt]);
poc.push_back(pr);
kon.push_back(kt);
if(!(por[por[kt]]==kt))sorr(kt);
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
int n;
cin>>n;
for(int i=0;i<n;i++){
cin>>t[i];
sor[i].first=t[i];
sor[i].second=i;
}
sort(sor,sor+n);
for(int i=0;i<n;i++){
por[sor[i].second]=i;
ktor[i]=sor[i].second;
}
bool f0=1;
for(int i=0;i<n;i++){
if(por[i]!=i)
f0=0;
}
if(f0){
cout<<0;
return 0;
}
bool fl=1;
for(int i=0;i<n;i++){
if(!(por[por[i]]==i)){
fl=0;
break;
}
}
if(fl==0){
cout<<2<<"\n";
for(int i=0;i<n;i++){
if(!(por[por[i]]==i)){
sorr(i);
}
}
cout<<(poc.size()+kon.size())<<"\n";
for(auto a:poc){
cout<<(a+1)<<" ";
}
for(int i=kon.size()-1;i>=0;i--){
cout<<(kon[i]+1)<<" ";
}
cout<<"\n";
}
if(fl)
cout<<1<<"\n";
kon.clear();
poc.clear();
for(int i=0;i<n;i++){
if(por[i]!=i){
poc.push_back(i);
kon.push_back(por[i]);
swap(por[i],por[por[i]]);
}
}
cout<<(poc.size()+kon.size())<<"\n";
for(auto a:poc){
cout<<(a+1)<<" ";
}
for(int i=kon.size()-1;i>=0;i--){
cout<<(kon[i]+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 | #include<bits/stdc++.h> using namespace std; const int MAXN=3e3+9; pair<int,int>sor[MAXN]; int t[MAXN]; int por[MAXN]; int ktor[MAXN]; vector<int>kon,poc; void sorr(int x){ int kt=ktor[x]; int pr=por[x]; int prkt=por[kt]; int prpr=por[pr]; swap(ktor[prkt],ktor[prpr]); swap(por[pr],por[kt]); poc.push_back(pr); kon.push_back(kt); if(!(por[por[kt]]==kt))sorr(kt); } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int n; cin>>n; for(int i=0;i<n;i++){ cin>>t[i]; sor[i].first=t[i]; sor[i].second=i; } sort(sor,sor+n); for(int i=0;i<n;i++){ por[sor[i].second]=i; ktor[i]=sor[i].second; } bool f0=1; for(int i=0;i<n;i++){ if(por[i]!=i) f0=0; } if(f0){ cout<<0; return 0; } bool fl=1; for(int i=0;i<n;i++){ if(!(por[por[i]]==i)){ fl=0; break; } } if(fl==0){ cout<<2<<"\n"; for(int i=0;i<n;i++){ if(!(por[por[i]]==i)){ sorr(i); } } cout<<(poc.size()+kon.size())<<"\n"; for(auto a:poc){ cout<<(a+1)<<" "; } for(int i=kon.size()-1;i>=0;i--){ cout<<(kon[i]+1)<<" "; } cout<<"\n"; } if(fl) cout<<1<<"\n"; kon.clear(); poc.clear(); for(int i=0;i<n;i++){ if(por[i]!=i){ poc.push_back(i); kon.push_back(por[i]); swap(por[i],por[por[i]]); } } cout<<(poc.size()+kon.size())<<"\n"; for(auto a:poc){ cout<<(a+1)<<" "; } for(int i=kon.size()-1;i>=0;i--){ cout<<(kon[i]+1)<<" "; } } |
English