fork download
  1. #include <bits/stdc++.h>
  2. #define fast ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(0)
  3. #define line "\n"
  4.  
  5. using namespace std;
  6.  
  7. deque<int> split(int left,int right)
  8. {
  9. if(left>=right)
  10. {
  11. deque<int> res= {right};
  12. return res;
  13. }
  14. int ele_num=right-left+1;
  15. int mid =((ele_num%2==0) ? (ele_num/2):((ele_num/2)+1))+left-1;
  16. deque<int> current;
  17. for(int i=left; i<=mid; i++)
  18. {
  19. current.push_back(i);
  20. }
  21. deque<int> splited =split(mid+1,right);
  22. if(splited.size()<current.size())
  23. {
  24. splited.push_front(splited.back());
  25. splited.pop_back();
  26. }
  27. int sizee=splited.size()+current.size();
  28. deque<int> result(sizee);
  29. int curr_c=0,spl_c=0;
  30.  
  31. for(int i=0; i<sizee; i+=2)
  32. {
  33. result[i]=current[curr_c];
  34. curr_c++;
  35. }
  36.  
  37. for(int i=1; i<sizee; i+=2)
  38. {
  39. result[i]=splited[spl_c];
  40. spl_c++;
  41. }
  42. return result;
  43. }
  44. int main()
  45. {
  46. fast;
  47. int t;
  48. cin>>t;
  49. while(t--)
  50. {
  51. int n;
  52. cin>>n;
  53. deque<int> result=split(1,n);
  54. for(auto d:result)
  55. {
  56. cout<<d<<" ";
  57. }
  58. if(t>0)
  59. cout<<line;
  60. }
  61. return 0;
  62. }
Success #stdin #stdout 0s 5296KB
stdin
1 5
stdout
1 5 2 4 3