#include<iostream> #include<vector> #include<algorithm> #include<deque> using namespace std; int t[3010];//pozycja aktualna dla wysokosci int h[3010];//wysokosc dla danej pozycji teraz int cz[3010];//cz zuzyty //wszystko przenumerowane vector< pair<int,int> >x; deque<int>dq; void f(int a){//a to pozycja aktualnego vector<int>v; v.push_back(a); cz[a]=1; while(cz[h[a]]==0){//kto ma moja pozycje a=h[a]; cz[a]=1; v.push_back(a); } //for(int i=0;i<v.size();i++)cout<<v[i]<<' '; for(int i=v.size()/2+1;i<v.size();i++)dq.push_front(v[i]); for(int i=(v.size()-1)/2;i>0;i--)dq.push_back(v[i]); //cout<<'\n'; return; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,v1; cin>>n; for(int i=1;i<=n;i++){ cin>>v1; x.push_back({v1,i}); } sort(x.begin(),x.end()); for(int i=0;i<x.size();i++){ h[x[i].second]=i+1; t[i+1]=x[i].second; } for(int i=1;i<=n;i++){ if(cz[i]==0){ f(i); } } if(dq.size()){ cout<<2<<'\n'; cout<<dq.size()<<'\n'; vector<int>v; while(!dq.empty()){ v.push_back(dq.front()); dq.pop_front(); } for(int i=0;i<v.size()/2;i++){ swap(t[h[v[i]]],t[h[v[v.size()-i-1]]]); swap(h[v[i]],h[v[v.size()-i-1]]); } for(int i=0;i<v.size();i++)cout<<v[i]<<' '; cout<<'\n'; for(int i=1;i<=n;i++)cz[i]=0; for(int i=1;i<=n;i++){ if(cz[i]==0&&cz[h[i]]==0){ if(h[i]==i)continue; dq.push_front(i); dq.push_back(h[i]); cz[i]=1; cz[h[i]]=1; } } cout<<dq.size()<<'\n'; while(!dq.empty()){ cout<<dq.front()<<' '; dq.pop_front(); } return 0; } for(int i=1;i<=n;i++)cz[i]=0; for(int i=1;i<=n;i++){ if(cz[i]==0&&cz[h[i]]==0){ if(h[i]==i)continue; dq.push_front(i); cz[i]=1; cz[h[i]]=1; dq.push_back(h[i]); } } if(dq.size()){ cout<<1<<'\n'<<dq.size()<<'\n'; while(!dq.empty()){ cout<<dq.front()<<' '; dq.pop_front(); } return 0; } cout<<0; return 0; }
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 | #include<iostream> #include<vector> #include<algorithm> #include<deque> using namespace std; int t[3010];//pozycja aktualna dla wysokosci int h[3010];//wysokosc dla danej pozycji teraz int cz[3010];//cz zuzyty //wszystko przenumerowane vector< pair<int,int> >x; deque<int>dq; void f(int a){//a to pozycja aktualnego vector<int>v; v.push_back(a); cz[a]=1; while(cz[h[a]]==0){//kto ma moja pozycje a=h[a]; cz[a]=1; v.push_back(a); } //for(int i=0;i<v.size();i++)cout<<v[i]<<' '; for(int i=v.size()/2+1;i<v.size();i++)dq.push_front(v[i]); for(int i=(v.size()-1)/2;i>0;i--)dq.push_back(v[i]); //cout<<'\n'; return; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n,v1; cin>>n; for(int i=1;i<=n;i++){ cin>>v1; x.push_back({v1,i}); } sort(x.begin(),x.end()); for(int i=0;i<x.size();i++){ h[x[i].second]=i+1; t[i+1]=x[i].second; } for(int i=1;i<=n;i++){ if(cz[i]==0){ f(i); } } if(dq.size()){ cout<<2<<'\n'; cout<<dq.size()<<'\n'; vector<int>v; while(!dq.empty()){ v.push_back(dq.front()); dq.pop_front(); } for(int i=0;i<v.size()/2;i++){ swap(t[h[v[i]]],t[h[v[v.size()-i-1]]]); swap(h[v[i]],h[v[v.size()-i-1]]); } for(int i=0;i<v.size();i++)cout<<v[i]<<' '; cout<<'\n'; for(int i=1;i<=n;i++)cz[i]=0; for(int i=1;i<=n;i++){ if(cz[i]==0&&cz[h[i]]==0){ if(h[i]==i)continue; dq.push_front(i); dq.push_back(h[i]); cz[i]=1; cz[h[i]]=1; } } cout<<dq.size()<<'\n'; while(!dq.empty()){ cout<<dq.front()<<' '; dq.pop_front(); } return 0; } for(int i=1;i<=n;i++)cz[i]=0; for(int i=1;i<=n;i++){ if(cz[i]==0&&cz[h[i]]==0){ if(h[i]==i)continue; dq.push_front(i); cz[i]=1; cz[h[i]]=1; dq.push_back(h[i]); } } if(dq.size()){ cout<<1<<'\n'<<dq.size()<<'\n'; while(!dq.empty()){ cout<<dq.front()<<' '; dq.pop_front(); } return 0; } cout<<0; return 0; } |