fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int main(){
  5. ios::sync_with_stdio(false);
  6. cin.tie(nullptr);
  7. int N;
  8. cin >> N;
  9. vector<int> P(N+1), pos(N+1);
  10. for(int i=1;i<=N;i++){cin>>P[i];pos[P[i]]=i;}
  11. vector<pair<int,int>> ops;
  12. for(int i=1;i<=N;i++){
  13. int p=pos[i];
  14. if(p==i) continue;
  15. int L=p-i+1;
  16. if(L%2){ // 홀수 길이 → 바로 뒤집기
  17. ops.emplace_back(i,p);
  18. reverse(P.begin()+i,P.begin()+p+1);
  19. for(int k=i;k<=p;k++) pos[P[k]]=k;
  20. }else{ // 짝수 길이 → 두 번 홀수로 해결
  21. ops.emplace_back(i,p+1);
  22. reverse(P.begin()+i,P.begin()+p+2);
  23. for(int k=i;k<=p+1;k++) pos[P[k]]=k;
  24. p=pos[i];
  25. ops.emplace_back(i+1,p);
  26. reverse(P.begin()+i+1,P.begin()+p+1);
  27. for(int k=i+1;k<=p;k++) pos[P[k]]=k;
  28. }
  29. }
  30. cout<<ops.size()<<"\n";
  31. for(auto &op:ops) cout<<op.first<<" "<<op.second<<"\n";
  32. }
Success #stdin #stdout 0s 5320KB
stdin
6
6 5 4 3 2 1
stdout
12
1 7
2 2
2 4
3 3
3 3
4 2
4 6
5 5
5 5
6 4
6 8
7 7