#include <bits/stdc++.h>
using namespace std;
vector<int>v;
map<int,int>m; //pozycja w v dla danego elementu
vector<deque<int>>wyniki;
void solve(int i){
deque<int>s;
vector<int>d=v;
sort(d.begin(),d.begin()+i);
bool e=true;
i=i-1;
vector<bool>ruszone(i,false);
while(e==true&&i>=0){
if(v[i]==d[i]){
i--;
}
else if(ruszone[i]==false){
s.push_front(i+1);
s.push_back(m[d[i]]+1);
swap(v[m[d[i]]],v[i]);
int xd=m[i];
m[i]=m[m[d[i]]];
m[m[d[i]]]=xd;
ruszone[i]=true;
ruszone[m[d[i]]]=true;
i--;
}
else{
e=false;
}
}
if(s.empty()==false){
wyniki.push_back(s);
}
if(i<=0){
return;
}
else{
i++;
solve(i);
return;
}
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
int a;
cin>>a;
v.push_back(a);
m[a]=i;
}
solve(n);
cout<<wyniki.size()<<'\n';
for(int i=0;i<wyniki.size();i++){
cout<<wyniki[i].size()<<'\n';
for(int j=0;j<wyniki[i].size();j++){
cout<<wyniki[i][j]<<" ";
}
cout<<'\n';
}
v.clear();
m.clear();
wyniki.clear();
}
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 | #include <bits/stdc++.h> using namespace std; vector<int>v; map<int,int>m; //pozycja w v dla danego elementu vector<deque<int>>wyniki; void solve(int i){ deque<int>s; vector<int>d=v; sort(d.begin(),d.begin()+i); bool e=true; i=i-1; vector<bool>ruszone(i,false); while(e==true&&i>=0){ if(v[i]==d[i]){ i--; } else if(ruszone[i]==false){ s.push_front(i+1); s.push_back(m[d[i]]+1); swap(v[m[d[i]]],v[i]); int xd=m[i]; m[i]=m[m[d[i]]]; m[m[d[i]]]=xd; ruszone[i]=true; ruszone[m[d[i]]]=true; i--; } else{ e=false; } } if(s.empty()==false){ wyniki.push_back(s); } if(i<=0){ return; } else{ i++; solve(i); return; } } int main(){ int n; cin>>n; for(int i=0;i<n;i++){ int a; cin>>a; v.push_back(a); m[a]=i; } solve(n); cout<<wyniki.size()<<'\n'; for(int i=0;i<wyniki.size();i++){ cout<<wyniki[i].size()<<'\n'; for(int j=0;j<wyniki[i].size();j++){ cout<<wyniki[i][j]<<" "; } cout<<'\n'; } v.clear(); m.clear(); wyniki.clear(); } |
English