rafid_shad

Merge

Nov 29th, 2021 (edited)
507
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 9.32 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3.  
  4. ///-----------------------------------compiler optimizer--------------------------------------------//
  5. //#pragma GCC optimize("Ofast")
  6. //#pragma GCC target("avx,avx2,fma")
  7. //#pragma GCC optimization("unroll-loops")
  8.  
  9. ///--------------------------------------data type--------------------------------------------------//
  10. typedef long long int lli;
  11.  
  12. ///----------------------------------------stack-----------------------------------------------------//
  13. typedef stack <int> STI;
  14. typedef stack <char> STC;
  15. typedef stack <string> STS;
  16.  
  17. ///----------------------------------------queue------------------------------------------------------//
  18. typedef queue <int> QI;
  19. typedef queue <char> QC;
  20. typedef queue <string> QS;
  21. typedef priority_queue <int> PQI;
  22.  
  23. ///---------------------------------------dequeue-----------------------------------------------------//
  24. typedef deque <int> DI;
  25. typedef deque <char> DC;
  26.  
  27. ///---------------------------------------set------------------------------------------------------//
  28. typedef set <int> SI;
  29. typedef set <string> SS;
  30. typedef set <char> SC;
  31. typedef multiset <int> MSI;
  32.  
  33. ///----------------------------------------map------------------------------------------------------//
  34. typedef map <int, int> MP;
  35. typedef map <string, int> MPSI;
  36. typedef map <char, int> MPCI;
  37.  
  38. ///----------------------------------------pair------------------------------------------------------//
  39. typedef pair <int, int> PII;
  40.  
  41. ///----------------------------------------vector------------------------------------------------------//
  42. typedef vector <int> VI;
  43. typedef vector <char> VC;
  44. typedef vector <string> VS;
  45. typedef vector <lli> VLLI;
  46.  
  47. ///----------------------------------------constant------------------------------------------//
  48.  
  49. #define MAX                 1E9 + 5
  50. #define MIN                 -1E9 - 5
  51. #define INF                 1E18 + 5
  52. #define MOD                 10000007
  53. #define py                  acos(-1.0)  /// 3.1415926535897932
  54.  
  55. ///-------------------------------------------------------------------------------//
  56. #define pp1(A)              printf("%d\n", A)
  57. #define ppl(A)              printf("%lld\n", A)
  58. #define pp2(A,B)            printf("%d %d\n", A, B)
  59. #define pp3(A,B,C)          printf("%d %d %d\n", A, B, C)
  60.  
  61. #define ss1(A)              scanf("%d", &A)
  62. #define ssl(A)              scanf("%lld", &A)
  63. #define ss2(A,B)            scanf("%d %d", &A, &B)
  64. #define ss3(A,B,C)          scanf("%d %d %d", &A, &B, &C)
  65.  
  66. ///---------------------------------------------------------------------------//
  67.  
  68. #define pf                  push_front
  69. #define pb                  push_back
  70. #define popb                pop_back
  71. #define popf                pop_front
  72.  
  73. #define ub                  upper_bound
  74. #define lb                  lower_bound
  75.  
  76. #define itr                 iterator
  77. #define ritr                reverse_iterator
  78.  
  79. #define mk                  make_pair
  80. #define ff                  first
  81. #define ss                  second
  82.  
  83. ///---------------------------------------------------------------------------//
  84. #define endl                "\n"
  85. #define gap                 " "
  86. #define END                 return 0
  87. #define line                printf( "\n")
  88. #define yes                 printf( "YES\n")
  89. #define no                  printf( "NO\n")
  90.  
  91. #define Before              printf( "Before  \n")
  92. #define After               printf( "After  \n")
  93.  
  94. #define enter1              printf( "Entered 1\n")
  95. #define enter2              printf( "Entered 2\n")
  96. #define enter3              printf( "Entered 3\n")
  97.  
  98. #define Case(k,n)           printf( "Case %d: %d\n", k, n)
  99. #define Casell(k,n)         printf( "Case %lld: %lld\n", k, n)
  100.  
  101. #define fastIO              cin.tie(0), cout.tie(0)
  102. #define TS                  template < typename T >
  103. #define TP                  template < typename F, typename S >
  104. #define TM                  template<typename T1, typename... T2>
  105. #define ddd(args...)        do { cerr << #args << "-> " ;  show(args); } while(0); cerr<< endl ;
  106.  
  107. ///-----------------------------------------------------------------------------//
  108. #define sq(a)               (a) * (a)
  109. #define SZ(a)               (int) a.size()
  110. #define all(a)              (a).begin(), (a).end()
  111. #define rall(a)             (a).rbegin(), (a).rend()
  112.  
  113. #define mem(x, y)           memset(x, y, sizeof(x))
  114. #define unq(v)              v.erase( unique( all(v)), v.end())
  115. #define rev(v)              reverse( all(v))
  116. #define sortV(v)            sort( all(v))
  117. #define sortA(a,n)          sort(a, a+n)
  118.  
  119. #define to_upper(s)         transform( s.begin(), s.end(), s.begin(), ::toupper)
  120. #define to_lower(s)         transform( s.begin(), s.end(), s.begin(), ::tolower)
  121. #define to_int(s)           stoi(s)
  122.  
  123. ///--------------------------------------------------------------------------------//
  124. #define Erase(V,I)          (V).erase((V).begin()+I)
  125. #define Insert(V,I,M)       (V).insert((V).begin()+I,M)
  126.  
  127. #define read()              freopen("input.txt", "r", stdin)
  128. #define write()             freopen("output.txt", "w", stdout)
  129.  
  130. ///-------------------------------------------------------------------------------------------------------------------------------//
  131. #define loop(i, n)          for(int i = 0; i < n; i++)
  132. #define loops(i, x, n)      for(int i = x; i < n; i++)
  133. #define loopr(i, n)         for(int i = n-1; i >= 0; i--)
  134. #define loopt(i, n)         for(int i = 1; i <= n; i++)
  135.  
  136. #define autoo(s)            for(auto it = s.begin(); it != s.end(); it++)
  137.  
  138. #define vin(V, N)           for(int i = 0; i < N; i++){ int X; ss1(X); V.pb(X); }
  139. #define vinll(V, N)         for(int i = 0; i < N; i++){ lli X; ssl(X); V.pb(X); }
  140.  
  141. #define ain(A, N)           for(int i = 0; i < N; i++){ ss1(A[i]); }
  142. #define ainll(A, N)         for(int i = 0; i < N; i++){ ssl(A[i]); }
  143.  
  144. #define aout(A, N)          for(int i = 0; i < N; i++){ printf("%d", A[i]); if (i < N-1) printf(" "); else printf("\n"); }
  145. #define vout(v)             for(int i = 0; i < v.size(); i++) { printf("%d", v[i]); if(i < v.size() - 1) printf(" "); else printf("\n");}
  146.  
  147. ///--------------------------------------------------Debugging-----------------------------------------------------------------//
  148.  
  149. TS void show (const T& v) { cerr << v << ' ' ;}
  150.  
  151. TM void show (const T1& first, const T2&... rest){ show(first); show(rest...); }
  152.  
  153. TP ostream& operator << (ostream& os, const pair<F,S>& p){return os<<"("<< p.ff << ", " << p.ss <<")" ;}
  154.  
  155. TS ostream& operator << (ostream& os, const vector<T>& v){os << "{"; typename vector< T >::const_iterator it;
  156.     for(it = v.begin(); it != v.end(); it++) {if( it != v.begin() )os << ", "; os<<*it; } return os<<"}";}
  157.  
  158. TS ostream& operator << (ostream& os, const set<T>& v){os << "["; typename set<T>::const_iterator it;
  159.     for(it = v.begin(); it != v.end(); it++){ if(it != v.begin())os<<", ";os <<*it; } return os <<"]"; }
  160.  
  161. TS ostream& operator << (ostream& os, const multiset<T>& v){os << "["; typename multiset<T>::const_iterator it;
  162.     for(it = v.begin(); it != v.end(); it++){ if(it != v.begin())os<<", ";os <<*it; } return os <<"]"; }
  163.  
  164. TP ostream& operator<<(ostream& os,const map<F,S>& v){os<<"["; typename map<F,S>::const_iterator it;
  165.     for(it = v.begin(); it != v.end(); it++){if(it != v.begin())os << ", "; os << it->ff <<" = " << it->ss; } return os<<"]";}
  166.  
  167. //-------------------------------------------------------------------------------------------------------------------------------//
  168.  
  169. lli lcm(lli a, lli b){
  170.     return a * (b / __gcd(a, b));
  171. }
  172.  
  173. ///----------------------graph moves----------------*/
  174. int dr[] = {+1, -1, +0, +0};
  175. int dc[] = {+0, +0, +1, -1};
  176.  
  177. ///----------------------kings moves-----------------*/
  178. int X[] = {+0, +0, +1, -1, -1, +1, -1, +1};
  179. int Y[] = {-1, +1, +0, +0, +1, +1, -1, -1};
  180.  
  181. ///----------------------knights moves----------------*/
  182. int KX[] = {-2, -2, -1, -1,  1,  1,  2,  2};
  183. int KY[] = {-1,  1, -2,  2, -2,  2, -1,  1};
  184.  
  185. ///-----------------------------------template------------------------------------------------//
  186. const int N = 100005;
  187. int n,  a[N];
  188. int cnt = 0;
  189.  
  190. void merge1(int l, int m, int r){
  191.     int n1 = m-l+1;
  192.     int n2 = r-m;
  193.     cout << "up " << l << gap << r << endl;
  194.  
  195.     int left[n1], right[n2];
  196.     cout << "left " << endl;
  197.  
  198.     loop(i, n1){
  199.         left[i] = a[l+i];
  200.         cout << left[i] << " ";
  201.     }
  202.     line;
  203.     cout << "right " << endl;
  204.     loop(i, n2){
  205.         right[i] = a[m+1+i];
  206.         cout << right[i] << " ";
  207.     }
  208.     line;
  209.  
  210.     int i = 0;
  211.     int j = 0;
  212.     int k = l;
  213.  
  214.  
  215.     while(i < n1 and j < n2){
  216.         if(left[i] <= right[j]){
  217.             a[k++] = left[i++];
  218.         }
  219.         else {
  220.             cnt += (n1 - i);
  221.             a[k++] = right[j++];
  222.         }
  223.     }
  224.     while(i < n1) a[k++] = left[i++];
  225.  
  226.     while(j < n2) a[k++] = right[j++];
  227.     cout << "cnt " << cnt << endl;
  228.     line;
  229.     line;
  230. }
  231.  
  232. void mergeSort(int l, int r){
  233.  
  234.     if(l >= r) return;
  235.  
  236.     int md = l + (r-l) / 2;
  237.  
  238.     mergeSort(l, md);
  239.     mergeSort(md+1, r);
  240.  
  241.     merge1(l, md, r);
  242. }
  243.  
  244. int main()
  245. {
  246.     #ifndef ONLINE_JUDGE
  247.     read();
  248.     write();
  249.     #endif // ONLINE_JUDGE
  250.    // fastIO;
  251.    cin >> n;
  252.  
  253.    loop(i, n) cin >> a[i];
  254.  
  255. //   loop(i, n){
  256. //    cout << a[i] << gap;
  257. //   }
  258.    mergeSort(0, n-1);
  259.  
  260.    loop(i, n){
  261.     cout << a[i] << gap;
  262.    }
  263.    line;
  264.    cout << cnt << endl;
  265.  
  266.  
  267. }
  268.  
  269.  
  270.  
Add Comment
Please, Sign In to add comment